算法说明 个人感觉是没有意义的算法,只是用来作为学术研究.或者说开拓一下思维. 从wikipedia copy来的一句解释的话:Stooge排序是一种低效的递归排序算法,甚至慢于冒泡排序.在<算法导论>第二版第7章(快速排序)的思考题中被提到,是由Howard.Fine等教授提出的所谓“漂亮的”排序算法. 实现逻辑: 同样也是从wikipedia copy来的 1.如果最后一个值小于第一个值,则交换这两个数2.如果当前集合元素数量大于等于3:3.使用臭皮匠排序前2/3的元素4.使用臭皮匠排序后…
算法说明 鸽巢排序是分布排序的一种,我理解其实鸽巢就是计数排序的简化版,不同之处就是鸽巢是不稳定的,计数排序是稳定的. 逻辑很简单,就是先找出待排数组的最大值maxNum,然后实例一个maxNum+1长度的数组. 例如待排数组int[] arrayData = { 22, 33, 57, 55, 58, 77, 44, 65, 58, 42 }; 最大值是77.然后实例一个int[] arrayTemp = new int[77]的数组. 然后呢,循环arrayData.然后第一个数字是22,…
算法说明 地精排序是交换排序的一种,它是冒泡排序的一种改良,我感觉和鸡尾酒排序挺像的. 不同之处是鸡尾酒排序是从小到大,然后再从大到小切换着排序的.而地精排序是上来先从小到大排序,碰到交换到再从大到小,接着再从小到大进行排序. 举个例子: 对8,6,4,5,1进行升序排序 1.8与6交换,结果是 {6,8,4,5,1} 2.8与4交换,结果是 {6,4,8,5,1} 3.4与6交换,结果是 {4,6,8,5,1} 4.5与8交换,结果是 {4,6,5,8,1} 5.6与5交换,结果是 {4,5,…
/* * 简单选择排序 */ public class SimpleSort { public static void main(String[] args) { int[] arrayData = { 5, 9, 6, 7, 4, 1, 2, 3, 8 }; SimpleSortMethod(arrayData); for (int integer : arrayData) { System.out.print(integer); System.out.print(" "); } }…
算法说明 若领图排序是分布排序的一种. 个人理解,若领图排序算是桶排序+计数排序的变异版,桶排序计数排序理解了,那么若领图排序理解起来就会比较容易.区别其实就是存储中间值的方式做了调整…… 话说,这个代码我写的很烂很吃力,而且写好几个小时才写好,再次证明我的资质真的很差哟... 好了,结合代码大概说一下流程,其实主要是希望将来我自己再看到后能很快的回忆出思路... 1.找出待排数组的最大值(20-25行代码). 2.根据最大值,建立计数数组,并对待排数组每个值进行计数(28-31行代码)(这个计…
春晚好看吗?不存在的!!! 在Java数据结构和算法(三)——冒泡.选择.插入排序算法中我们介绍了三种简单的排序算法,它们的时间复杂度大O表示法都是O(N2),如果数据量少,我们还能忍受,但是数据量大,那么这三种简单的排序所需要的时间则是我们所不能接受的.接着我们在讲解递归 的时候,介绍了归并排序,归并排序需要O(NlogN),这比简单排序要快了很多,但是归并排序有个缺点,它需要的空间是原始数组空间的两倍,当我们需要排序的数据占据了整个内存的一半以上的空间,那么是不能使用归并排序的. 本篇博客将…
本章将会学习最常见的排序和搜索算法,如冒泡排序.选择排序.插入排序.归并排序.快速排序和堆排序,以及顺序排序和二叉搜索算法. 第十章 排序和搜索算法 排序算法 我们会从一个最慢的开始,接着是一些性能好一些的方法 先创建一个数组(列表)来表示待排序和搜索的数据结构. function ArrayList(){ var array = []; this.insert = function(item){ array.push(item); } this.toString = function(){ r…
输入整型数组和排序标识,对其元素按照升序或降序进行排序 (一组测试用例可能会有多组数据) 接口说明 原型: void sortIntegerArray(Integer[] pIntegerArray, int iSortFlag); 输入参数: Integer[] pIntegerArray:整型数组 int iSortFlag:排序标识:0表示按升序,1表示按降序 输出参数: 无 返回值: void 示例 输入 // 输入需要输入的整型数个数 8 1 2 4 9 3 55 64 25 0 输出…
归并排序 1) 整体就是一个简单递归,左边排好序.右边排好序.让其整体有序 2) 让其整体有序的过程里用了外排序方法 3) 利用master公式来求解时间复杂度 4) 归并排序的实质 时间复杂度0(N*logN),额外空间复杂度0(N) JAVA import java.util.Arrays; public class MergeSort { public static void mergeSort(int[] arr) { if (arr == null || arr.length < 2)…
---恢复内容开始--- 算法说明 珠排序是分布排序的一种. 说实在的,这个排序看起来特别的巧妙,同时也特别好理解,不过不太容易写成代码,哈哈. 这里其实分析的特别好了,我就不画蛇添足啦.  大家看一下这个分析,特别特别简单的. 然后我对于下面的代码做一下描述: 1.找到数组的最大值(20-23行代码) 2.创建珠排序的容器,并且进行初始化(28-34行代码) 3.进行排序(39-44行代码),这里是珠排序的核心,也不太好解释,所以还是举例子啦. 例如排序的数组是int[] arr = { 2,…