一、插入排序
1、代码如下:
public static void insertSort1(int[] ints) { //i循环:从索引1开始一直到最后 for(int i=1;i<ints.length;i++) { if(ints[i] < ints[i-1]) {//i位置的值需要插入到前面位置 //j循环:从0开始到i前面 for(int j=0;j<i;j++) { if(ints[i] < ints[j]) {//找到插入位置(j位置) int temp = ints[i]; //k循环:将数据向后移动 for(int k=i-1;k >= j;k--) { ints[k+1] = ints[k]; } ints[j] = temp; break; } } } } }
2、其实2个for循环也可以解决,代码如下:
public static void insertSort2(int[] ints) { for(int i = 1;i < ints.length;i++) { if(ints[i] < ints[i-1]) { for(int j = 0;j< i; j++) { if(ints[i] < ints[j]) { int temp = ints[i]; ints[i] = ints[j]; ints[j] = temp; } } } } }
二、快速排序
/** * 快速排序 * @param ints 需要排序的数组 * @param start 开始位置 * @param end 结束位置 */ public static void fastSort(int[] ints,int start,int end) { if(start < end) { int index = sortUnit(ints, start, end);//获取标杆值所在的位置 fastSort(ints, start, index-1);//左边 fastSort(ints, index+1, end);//右边 } } /** * 返回标杆值在数组中的位置 * @param ints 需要排序的数组 * @param start 开始位置 * @param end 结束位置 * @return */ public static int sortUnit(int[] ints,int start,int end) { int temp = ints[start]; int j = end; int i = start; while(i<j) { while(i<j) { if(ints[j] < temp) {//j负责找到比标杆小的数,扔给i ints[i] = ints[j]; break; } j--; } while(i<j) { if(ints[i] >= temp) {//j负责找到比标杆大的数,扔给j ints[j] = ints[i]; break; } i++; } } ints[i] = temp;//将标杆值放入到数组中 return i; }
三、堆排序
public static void stackSort(int[] ints) { int size = ints.length; while(size>2) { //建最大堆 //循环次数:父节点的个数,父节点索引 for(int i = (size-1)/2;i>=1;i--) { int maxIndex = i*2;//假设做儿子最大 //左儿子=父节点索引*2,右儿子=左儿子+1 if((maxIndex+1) < size && ints[maxIndex+1] > ints[maxIndex]) {//假设有右儿子且右儿子比左儿子大 maxIndex++;//右儿子大 } //最大的儿子与父亲比 if(ints[maxIndex] > ints[i]) { int temp = ints[maxIndex]; ints[maxIndex] = ints[i]; ints[i] = temp; } } //根节点与最后一个节点交换 int data = ints[1]; ints[1] = ints[size-1]; ints[size-1] = data; size--; } }
注:堆排序对数组的第一个元素不进行处理
四、冒泡排序
public static void bubbleSort(int[] ints) { for(int i=0;i<ints.length-1;i++) { for(int j=0;j<ints.length-1-i;j++) { if(ints[j+1] < ints[j]) { int temp = ints[j+1]; ints[j+1] = ints[j]; ints[j] = temp; } } } }