1、桶排序:思路简单,占用空间大,就是把数字本身作为数组的下表,然后顺序输出即可
2、冒泡排序:运算量大
/** * 冒泡,或者叫下沉 * @param array */ public void MaopaoSort(int[] array , int num)/*入参:数组本身和数组大小*/ { for(int i=0; i<num; i++) { for(int j=0; j<(num-2-i); j++) //排过一轮之后最后最后一个数字变成了最大的 { if(array[j]>array[j+1]) { array[j]=array[j]+array[j+1]; //可以不用第三个变量进行swap的方法
array[j+1]=a[j]-array[j+1];
array[j]=a[j]-array[j+1]; } } } }
3、快速排序
1 /** 2 * 快速排序 3 * @param args 4 */ 5 public void quickSort(int[] array, int left, int right) 6 { 7 if(lef t>= right)//无须再比 8 { 9 return; 10 } 11 12 int tmp = array[left];//先取出一个临时值作为分界标识 13 int i = left; 14 int j = right; 15 16 while(i<j) 17 { 18 while(i<j && array[j] >= tmp) //从右侧开始向中间靠近 19 { 20 j--; 21 } 22 if(i<j)//找到比分界值小的元素 23 { 24 a[i] = a[j];//不要担心被覆盖,因为a[i]已经被保存起来了 25 i++; 26 } 27 28 while(i<j && a[i] <= tmp)//从左侧开始向中间靠近 29 { 30 i++; 31 } 32 if(i<j)//找到比分界值大的元素 33 { 34 a[j] = a[i]; 35 j--; 36 } 37 }//一轮排序完成,分成两组,左边的组都比tmp值小,右边的组都比tmp大 38 a[i] = tmp;//新的分界值 39 quickSort(array,i+1,right);//这个从新排序的分界开始还不是很明白 40 quickSort(array,left,j-1); 41 42 43 } 44 /** 45 * 快速排序非递归版本,这个版本我理解得不好 46 * @param args 47 */ 48 public <T extends Comparable<T>> void quickSort2(List<T> array,int left,int right) 49 { 50 Num num = new Num(left,right); 51 LinkedList<Num> link = new LinkedList<Num>(); 52 link.addLast(num); 53 54 while(!link.isEmpty()) 55 { 56 Num tmpnum = link.removeFirst(); 57 int i = tmpnum.l; 58 int j = tmpnum.r; 59 if(i>=j) 60 { 61 continue ; 62 } 63 int l = i; 64 int r = j; 65 T tmp = array.get(i); 66 67 while(i<j) 68 { 69 while(i<j && array.get(j).compareTo(tmp) >= 0) 70 { 71 j--; 72 } 73 if(i<j) 74 { 75 array.set(i, array.get(j)); 76 i++; 77 } 78 79 while(i<j && array.get(i).compareTo(tmp) <= 0) 80 { 81 i++; 82 } 83 if(i<j) 84 { 85 array.set(j,array.get(i)); 86 j--; 87 } 88 89 } 90 array.set(i, tmp); 91 link.addLast(new Num(i+1,r)); 92 link.addLast(new Num(l,j-1)); 93 } 94 }
参考:
http://blog.csdn.net/morewindows/article/category/859207
《啊哈!算法》