最近在面试,遇到很多排序算法问题总结一下。
定义数组如下:
int[] array = new int[]{4, 1, 8, 2, 5, 6};
/** * insert sort * @param a */ private static void insertSort(int[] a){ System.out.println("插入排序过程:"); for (int i = 1; i < a.length; i++) { int temp = a[i]; int j = i - 1; while (j >= 0 && a[j] > temp) { a[j + 1] = a[j]; j--; } a[j + 1] = temp; System.out.print("第" + i + "步:"); printArray(a); } System.out.println("插入排序结果:"); printArray(a); }
插入排序过程:
第1步:1 4 8 2 5 6
第2步:1 4 8 2 5 6
第3步:1 2 4 8 5 6
第4步:1 2 4 5 8 6
第5步:1 2 4 5 6 8
插入排序结果:
1 2 4 5 6 8
希尔排序实现:
private static void shellInsertSort(int[] a, int start, int dk){ int i, j; for (i = start + dk; i < a.length; i +=dk) { j = i - dk; int temp = a[i]; while(j >= 0 && a[j] > temp){ a[j + dk] = a[j]; j -= dk; } a[j + dk] = temp; } System.out.println("排序结果:"); printArray(a); }
/** * bubble sort * @param a */ private static void bubbleSort(int[] a){ System.out.println("冒泡排序过程:"); for (int i = 0; i < a.length; i++) { for (int j = 0; j < a.length - i - 1; j++) { if(a[j] > a[j + 1]){ int temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } } System.out.print("第" + (i+1) + "步:"); printArray(a); } System.out.println("冒泡排序结果:"); printArray(a); }
冒泡排序过程:
第1步:1 4 2 5 6 8
第2步:1 2 4 5 6 8
第3步:1 2 4 5 6 8
第4步:1 2 4 5 6 8
第5步:1 2 4 5 6 8
第6步:1 2 4 5 6 8
冒泡排序结果:
1 2 4 5 6 8
改进的冒泡排序算法:
private static void bubbleSortBetter(int[] a){ System.out.println("改进的冒泡排序过程:"); boolean bool; int i = 0; do{ bool = false; for (int j = 0; j < a.length - i - 1; j++) { if(a[j] > a[j + 1]){ int temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; bool = true; } } i ++; System.out.print("第" + i + "步:"); printArray(a); }while(bool == true && i < a.length); System.out.println("改进的冒泡排序结果:"); printArray(a); }
改进的冒泡排序过程:
第1步:1 4 2 5 6 8
第2步:1 2 4 5 6 8
第3步:1 2 4 5 6 8
改进的冒泡排序结果:
1 2 4 5 6 8
与之前算法对比可见效果。
有问题请留言,大家一起交流学习!
说明:转载请注明出处