这一章主要复习下以前所接触的算法,
(1)选择排序法:在要排序的一组数中,选出最小的一个数与第一个位置的数交换;然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。
/** * 选择排序算法 在未排序序列中找到最小元素,存放到排序序列的起始位置 * 再从剩余未排序元素中继续寻找最小元素,然后放到前面已排序序列末尾。 * 以此类推,直到所有元素均排序完毕。 * * @param numbers */ public static void selectSort(int[] numbers) { int size = numbers.length; // 数组长度 ; // 中间变量 ; i < size-; i++) {//i代表最后排好顺序的index int k = i; // 待确定的位置 // 选择出应该在第i个位置的数 ; j > i; j--) { if (numbers[j] < numbers[k]) { k = j;//只要后面的数要比待确定位上的数小,就往前挪到k对应位置 1819 } } // 交换两个数 temp = numbers[i]; numbers[i] = numbers[k]; numbers[k] = temp; } }
(2)冒泡排序法:它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
有重泡下沉和轻泡上浮两种形式:
重泡下沉:
public static void bubbleSort(int[] ary) { ; i < ary.length - ; i++) { ; j < ary.length - i - ; j++) { ]) { int t = ary[j]; ary[j] = ary[j + ]; ary[j + ] = t; } } } }
轻泡上浮:
public static void bubbleSort(int[] ary) { ; i < ary.length - ; i++) { ; j > ; j--) { ]) { int t = ary[j]; ary[j] = ary[j - ]; ary[j - ] = t; } } } }
(3)插入排序:每步将一个待排序的记录,按其顺序码大小插入到前面已经排序的字序列的合适位置(从后向前找到合适位置后),直到全部插入排序完为止。
public static void insertSort(int[] ary){ int i,j,k; ; i<ary.length; i++){ k = ary[i];//step1,先取出作为判断标准 ; j>= && ary[j]>k; j--){ ary[j+] = ary[j];//step2,移动a[j]-->a[j+1] } ary[j+] = k;//step3,插入, } }
其他算法请参考:http://www.cnblogs.com/0201zcr/p/4764427.html
http://www.cnblogs.com/sevenyuan/archive/2009/12/04/1616897.html
非常感谢原作者