最近在面试遇到很多排序算法问题总结一下
定义数组如下
[java]
int[] array = new int[]{ };
int[] array = new int[]{ };
首先是插入排序
[java]
/**
* insert sort
* @param a
*/
private static void insertSort(int[] a){
Systemoutprintln(插入排序过程);
for (int i = ; i < alength; i++) {
int temp = a[i];
int j = i ;
while (j >= && a[j] > temp) {
a[j + ] = a[j];
j;
}
a[j + ] = temp;
Systemoutprint(第 + i + 步);
printArray(a);
}
Systemoutprintln(插入排序结果:);
printArray(a);
}
/**
* insert sort
* @param a
*/
private static void insertSort(int[] a){
Systemoutprintln(插入排序过程);
for (int i = ; i < alength; i++) {
int temp = a[i];
int j = i ;
while (j >= && a[j] > temp) {
a[j + ] = a[j];
j;
}
a[j + ] = temp;
Systemoutprint(第 + i + 步);
printArray(a);
}
Systemoutprintln(插入排序结果:);
printArray(a);
}
运行结果
插入排序过程
第步
第步
第步
第步
第步
插入排序结果:
希尔排序实现
[java]
private static void shellInsertSort(int[] a int start int dk){
int i j;
for (i = start + dk; i < alength; i +=dk) {
j = i dk;
int temp = a[i];
while(j >= && a[j] > temp){
a[j + dk] = a[j];
j = dk;
}
a[j + dk] = temp;
}
Systemoutprintln(排序结果);
printArray(a);
}
private static void shellInsertSort(int[] a int start int dk){
int i j;
for (i = start + dk; i < alength; i +=dk) {
j = i dk;
int temp = a[i];
while(j >= && a[j] > temp){
a[j + dk] = a[j];
j = dk;
}
a[j + dk] = temp;
}
Systemoutprintln(排序结果);
printArray(a);
}
冒泡排序实现
[java]
/**
* bubble sort
* @param a
*/
private static void bubbleSort(int[] a){
Systemoutprintln(冒泡排序过程);
for (int i = ; i < alength; i++) {
for (int j = ; j < alength i ; j++) {
if(a[j] > a[j + ]){
int temp = a[j];
a[j] = a[j + ];
a[j + ] = temp;
}
}
Systemoutprint(第 + (i+) + 步);
printArray(a);
}
Systemoutprintln(冒泡排序结果);
printArray(a);
}
/**
* bubble sort
* @param a
*/
private static void bubbleSort(int[] a){
Systemoutprintln(冒泡排序过程);
for (int i = ; i < alength; i++) {
for (int j = ; j < alength i ; j++) {
if(a[j] > a[j + ]){
int temp = a[j];
a[j] = a[j + ];
a[j + ] = temp;
}
}
Systemoutprint(第 + (i+) + 步);
printArray(a);
}
Systemoutprintln(冒泡排序结果);
printArray(a);
}
运行结果
冒泡排序过程
第步
第步
第步
第步
第步
第步
冒泡排序结果
改进的冒泡排序算法
[java] view plaincopyprint?private static void bubbleSortBetter(int[] a){
Systemoutprintln(改进的冒泡排序过程);
boolean bool;
int i = ;
do{
bool = false;
for (int j = ; j < alength i ; j++) {
if(a[j] > a[j + ]){
int temp = a[j];
a[j] = a[j + ];
a[j + ] = temp;
bool = true;
}
}
i ++;
Systemoutprint(第 + i + 步);
printArray(a);
}while(bool == true && i < alength);
Systemoutprintln(改进的冒泡排序结果);
printArray(a);
}
private static void bubbleSortBetter(int[] a){
Systemoutprintln(改进的冒泡排序过程);
boolean bool;
int i = ;
do{
bool = false;
for (int j = ; j < alength i ; j++) {
if(a[j] > a[j + ]){
int temp = a[j];
a[j] = a[j + ];
a[j + ] = temp;
bool = true;
}
}
i ++;
Systemoutprint(第 + i + 步);
printArray(a);
}while(bool == true && i < alength);
Systemoutprintln(改进的冒泡排序结果);
printArray(a);
}
运行结果
改进的冒泡排序过程
第步
第步
第步
改进的冒泡排序结果
与之前算法对比可见效果