标签:
思想:每一趟将一个待排序的记录,按照其关键字的大小向前查找,插入到有序队列的合适位置里,直到所有记录插入完成。
如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序就是排好序后的顺序,所以插入排序是稳定的
//插入排序 /*** * temp作为哨兵,一直向前找,知道找到一个比temp小的位置; * 将身后的元素一次后移,再把temp插入到当前位置 * @param array */ public static void InsertSort(int[] array) { for(int i = 1; i <= array.length - 1; i++) { if(array[i] < array[i - 1]) { int temp = array[i]; int j = i - 1; while(j > -1 && temp < array[j]) { array[j + 1] = array[j]; j--; } array[j + 1] = temp; } } }
思想:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量
public static void ShellSort(int[] array, int dis) { for(int dk = dis; dk >= 1; dk = dk / 2) { for(int i = dk; i < array.length; i++) { if(array[i] < array[i - dk]) { int temp = array[i]; int j = i - dk; while(j > -1 && temp < array[j]) { array[j + dk] = array[j]; j -= dk; } array[j + dk] = temp; } } } }
思想:在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换;然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止。
public static void SelectSort(int[] array) { for(int i = 0; i < array.length; i++) { int min = array[i]; int index = i; for(int j = i; j < array.length; j++) { if(array[j] < min) { min = array[j]; index = j; } } if(i != index) { int temp = array[i]; array[i] = min; array[index] = temp; } } }
思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换
/** * 冒泡排序 * 在要排序的一组数中,对当前还未排好序的范围内的全部数, * 自上而下对相邻的两个数依次进行比较和调整, * 让较大的数往下沉,较小的往上冒。 * 即:每当两相邻的数比较后发现它们的排序与排序要求相反时, * 就将它们互换 * @param a */ public static void BubbleSort(int[] array) { for(int i = 0; i < array.length; ++i) { for(int j = 0; j < array.length - i - 1; j++) { if(array[j] > array[j + 1]) { int temp = array[j + 1]; array[j + 1] = array[j]; array[j] = temp; } } } }
思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
方法:
/** * @param a */ public static void QuickSort(int[] array, int low, int high) { if(low < high) { int piv = partition(array, low, high); QuickSort(array, low, piv - 1); QuickSort(array, piv + 1, high); } } public static int partition(int[] array, int low, int high) { int pivKey = array[low]; while(low < high) { while(low < high && pivKey < array[high]) --high; pivKey = pivKey + array[high];//此三行是为了交换两个变量的值。。。。。 array[high] = pivKey - array[high]; pivKey = pivKey - array[high]; while(low < high && pivKey > array[low]) ++low; pivKey = pivKey + array[low]; array[low] = pivKey - array[low]; pivKey = pivKey - array[low]; } return low; }
标签:
原文地址:http://www.cnblogs.com/hao555sky/p/5164284.html