最近在面试,遇到很多排序算法问题总结一下。
定义数组如下:
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
与之前算法对比可见效果。
有问题请留言,大家一起交流学习!
说明:转载请注明出处