1、冒泡排序
优:简单,稳定,空间复杂度较低
缺:慢,时间复杂度较高
public static void main (String []args){
int []a ={1,6,2,4,9,0,3,7,5,8};
sort(a);
for(int i:a){
System.out.print(i+"\t");
}
}
/**
* 冒泡排序
* @param a
*/
public static void sort(int []a){
int length = a.length;
int tem = 0;
for(int i = 0; i<length-1; i++){
for(int j = i+1; j<length;j++){
if(a[i]>a[j]){ //交换数据
tem = a[i];
a[i] = a[j];
a[j] = tem;
}
}
}
}
2、插入排序
优:快,稳定
缺:比较次数不一定,比较次数少,则数据移动多
public static void main (String []args){
int []a ={1,6,2,4,9,0,3,7,5,8};
insertSort(a);
for(int i:a){
System.out.print(i+"\t");
}
}
/**
* 插入排序
* @param a
*/
public static void insertSort(int []a){
for(int i = 1 ; i < a.length ; i++){
int j = i - 1;
int tem = a[i];
while(j>=0 && a[j]>tem){
a[j+1] = a[j];
j--;
}
a[j+1] = tem;
}
}
3、快速排序
优:快,数据移动少
缺:不稳定
public static void main (String []args){
int []a ={1,6,2,4,9,0,3,7,5,8};
quickSort(a,0,a.length-1);
for(int i:a){
System.out.print(i+"\t");
}
}
/**
* 快速排序
* @param a
* @param low
* @param height
*/
public static void quickSort(int []a , int low , int height){
if(low < height){
int tem = quick(a,low,height);
quickSort(a,low,tem-1);
quickSort(a,tem+1,height);
}
}
public static int quick(int a[], int low, int height){
int n = low;
int x = a[low];
while(low < height){
if(a[height] < x){
if(a[low] > x){
int tem = a[low];
a[low] = a[height];
a[height] = tem;
}else{
low++;
}
}else{
height--;
}
}
a[n] = a[low];
a[low] = x;
return low;
}