快速排序的原文链接:http://www.cnblogs.com/morewindows/archive/2011/08/13/2137415.html
有时间把分析写上去,直接先上代码
冒泡排序:
public class Main {
public static void main(String[] args){
int[] array = new int[]{
72, 6, 57, 88, 60, 42, 83, 73, 48, 85
};
//Main.bubbleSort(array);
Main.BubbleSortNew(array);
System.out.println("排序后:");
Main.print(array);
}
// // 自己的BubbleSort,看打印结果就知道了,明显不是冒泡排序。没有一点痕迹。。。
// public static void bubbleSort(int[] a){
// if(null==a){
// System.out.println("数组空,无法排序");
// return;
// }
//
// int length = a.length;
//
// for(int i=0; i<length-1; i++){
// for(int j=i+1; j<length; j++){
//
// if(a[i]>a[j]){
// Main.swap(a, i, j);
// }
//
// }
//
// System.out.println("第" + (i+1) + "轮冒泡");
// Main.print(a);
// }
//
// }
// 视频的
public static void BubbleSortNew(int[] a){
if(null==a){
System.out.println("数组空,无法排序");
return;
}
int length = a.length;
for(int i=0; i<length; i++){
for(int j=0; j<length-i-1; j++){
if( a[j]>a[j+1]){
Main.swap(a, j, j+1);
}
}
System.out.println("第" + (i+1) + "轮冒泡");
Main.print(a);
}
}
public static void swap(int[] a, int start, int end){
int temp = a[start];
a[start] = a[end];
a[end] = temp;
}
public static void print(int[] a){
if(null==a){
System.out.println("[]");
return;
}
for(int i=0; i<a.length; i++){
System.out.print(a[i] + "\t");
}
System.out.println();
}
}
快速排序:
public class Main {
public static void main(String[] args){
int[] array = new int[]{
72, 6, 57, 88, 60, 42, 83, 73, 48, 85
};
print(array);
int i=0;
int j=array.length-1;
quickSort(array, i, j);
}
public static void quickSort(int[] a, int left, int right){
int i = 0;
int j = 0;
int KEY = 0;
if(left < right)
{
i = left;
j = right;
KEY = a[left];
while(i<j){
// 先从后向前,找到比KEY小的则推出
while(i<j && a[j]>KEY){
j--;
}
a[i++] = a[j];
// 再从前往后, 找到比KEY大的则退出
while(i<j && a[i]<KEY){
i++;
}
a[j--] = a[i];
}
// 把中间空缺的值填补上
a[i] = KEY;
Main.print(a);
// 排序左侧半部分
quickSort(a, left, i-1);
// 排序右侧半部分
quickSort(a, i+1, right);
}
}
public static void print(int[] a){
for(int i=0;i<a.length; i++){
System.out.print(a[i] + " ");
}
System.out.println();
}
}