摘要: 鸡尾酒排序是冒泡排序的变体:循环一次排好两个数,最大最小的数分别置于首尾。 1 //鸡尾酒排序 2 public class CocktailSort 3 { 4 public void cocktailSort(int[] r) 5 { 6 int length=r.length; 7 boolean swaped=true; 8 for(int i=0;ir[j+1])//将最大的元素放在末尾14 {15 int temp=r[j];16 ... 阅读全文
posted @ 2013-10-27 22:55 JMSXH 阅读(218) 评论(0) 推荐(0) 编辑
摘要: 基数排序是有两种选择,一种是高位优先法(MSD)(Most Significant Digit first),一种是低位优先法(LSD)(Least Significant Digit first),后者是先按个位数大小进行排序,再依次向高位排序。 1 //基数排序 2 public class RadixSort 3 { 4 public void radixSort(int[] r,int radix,int distance) 5 { 6 /* 7 temp是缓存数组 8 buckets是待排序元素按关键字的计数 9 ... 阅读全文
posted @ 2013-10-27 21:38 JMSXH 阅读(386) 评论(0) 推荐(0) 编辑
摘要: 计数排序是遍历待排序序列元素,记录每个元素的个数,继而计算小于或等于此元素的元素个数。第二步是从右到左遍历待排序序列,将每个元素放到辅助序列的正确位置。//计数排序public class CountSort { public int[] countSort(int[] a,int k) { int[] c=new int[k+1];//构造一个计数数组,k是待排序数组的最大值 int length=a.length; int[] b=new int[length];//构造一个b数组 for(int i=0;i=0;i--)... 阅读全文
posted @ 2013-10-27 17:20 JMSXH 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 归并排序基于两个已排好序的序列合成一个排好的序列的思想。//归并排序public class MergeSort { public void mergeSort(int[] a,int low,int high) { if(low<high) { mergeSort(a,low,(low+high)/2); mergeSort(a,(low+high)/2+1,high); merge(a,low,(low+high)/2,high); } } //将两个有序区间... 阅读全文
posted @ 2013-10-27 11:06 JMSXH 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 堆排序是简单选择排序的改进,相同点是都是选择最小或者是最大元素与最后面的元素进行交换,不同点是在元素比较的过程当中元素有交换,而这种交换跟冒泡排序的交换不一样,它都是有效的交换。//堆排序public class HeapSort { public void heapSort(int[] r) { int n=r.length; //循环建堆,建一次大顶堆,取得一个最大的数放到最后,剩余的重新建堆 for(int i=0;i=0;i--) { //将父节点标记为k int k=i;... 阅读全文
posted @ 2013-10-27 10:56 JMSXH 阅读(121) 评论(0) 推荐(0) 编辑
摘要: 简单选择排序跟冒泡排序有些相似,只是冒泡排序相对交换的数要多,前者只在需要交换的地方才交换。如果按升序排列,第一趟,选择最小的元素与第一个元素交换,在查询的过程当中,没有元素的交换,只有指向的移动,min总是指向最小元素的下标。public class SelectSort { public void selectSort(int[] r,int low,int high) { for(int k=low;k<high-1;k++)//作n-1趟选取 { int min=k; // 将最小元素下标指向min ... 阅读全文
posted @ 2013-10-27 10:53 JMSXH 阅读(130) 评论(0) 推荐(0) 编辑
摘要: 快速排序是从序列中选择一个比较对象,然后其他的元素与它比较分成两组,按照相同的方法在两组中以此划分,直到以两个数为一组。就像递归函数一样。//快速排序public class QuickSort{ public void quickSort(int[] r,int low,int high) { if(lowlow) quickSort(r,low,pa-1);//将pa左边的序列排序 if(pa+1=privot)//从右边向左扫描,找到第一个比privot小的数向前移,否则元素不动指针前... 阅读全文
posted @ 2013-10-27 10:39 JMSXH 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 冒泡排序是将相邻两个元素进行比较,如果是从前往后面开始那么进行一趟比较之后最轻或最最重的元素就在后面面了,然后前n-1个数再次比较,依次下去。//冒泡排序public class BubbleSort{ public void bubbleSort(int[] r,int low,int high) { int n=high-low+1; for(int i=1;ir[j+1]) { int temp=r[j]; r[j]=r[j+1]; ... 阅读全文
posted @ 2013-10-26 23:14 JMSXH 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 希尔排序是直接插入排序的改进版,它是将序列分组排序,但是位置不变,然后改变组数这样的话移动的位置就相对较少,以此改变步长,最后一个必须是1,也就是直接插入排序。//希尔排序public class ShellSort { public void shellSort(int[] r,int low,int high,int[] delta) { for(int k=0;k=low && temp<r[j];j=j-deltak) r[j+deltak]=r[j]; r[j+deltak]=temp;... 阅读全文
posted @ 2013-10-26 23:05 JMSXH 阅读(136) 评论(0) 推荐(0) 编辑
摘要: 折半插入排序,是将待插入数首先与已排好序的中间位置数比较,如果大于中间数则将比较范围最低位置设置在中间位置的后一个数,以此循环比较找到正确插入的位置。//折半排序public class BinInsertSort{ public void binInsertSort(int[] r,int low,int high) { for(int i=low+1;ir[mid]) lo=mid+1; else hi=mid-1; } ... 阅读全文
posted @ 2013-10-26 22:49 JMSXH 阅读(137) 评论(0) 推荐(0) 编辑