排序算法

来源:互联网 发布:淘宝类目007是什么牌子 编辑:程序博客网 时间:2024/05/01 15:17

八大排序对比




1直接插入排序,拿当前要排序的数字key与前面排好序的数字做对比,如果对比的的数字比key大,则把对比的数字往后移,如果前面的数字比key小,则把key插入对比的数字的后面

public void sort(int[] sortNum) {
int key;
for(int i=1;i<sortNum.length;i++){
key=sortNum[i];
int j=i-1;
   while(j>=0&&(sortNum[j])>key){
    sortNum[j+1]=sortNum[j];
    j--; 
   }
   sortNum[j+1]=key; 
}
}



2.冒泡排序

每一轮从后往前把最小的浮出水面

public void sort(int[] sortNum) {
int temp;
for(int i=0;i<sortNum.length;i++){
for(int j=sortNum.length-1;j>i;j--){
if(sortNum[j]<sortNum[j-1]){
temp=sortNum[j];
sortNum[j]=sortNum[j-1];
sortNum[j-1]=temp;
}
}
}
}


3.快速排序

前后两个指针慢慢往中间移动

public void sort(int[] sortNum) {

sort(sortNum,0,sortNum.length-1);


}
private void sort(int[] sortNum,int low,int hight){
if(low<hight){
int middle=quickSort(sortNum,0,sortNum.length-1);
sort(sortNum,low,middle-1);
sort(sortNum,middle+1,hight);
}
}

private int  quickSort(int[] sortNum,int low,int hight){

int key=sortNum[low];
while(low<hight){
while(low<hight&&sortNum[hight]>key){
hight--;
}
sortNum[low]=sortNum[hight];
while(low<hight&&sortNum[low]<key){
low++;
}
sortNum[hight]=sortNum[low];
}
sortNum[low]=key;

return low;
}


4.希尔排序

把相隔d的数据组成一个子序列,子序列用插入排序排好顺序,在把距离d缩短,再把子序列排序,直到d=1

public void sort(int[] sortNum) {
int length=sortNum.length;
if(length<=0){
return;
}
        int d=length/2;
        while(d>=1){
        for(int i=0;i<d;i++){
        for(int j=d;j<length;j++){
        int key=sortNum[j];
        int k=j;
        while(k>=d&&key<sortNum[k-d]){
        sortNum[k]=sortNum[k-d];
        k-=d;
        }
        sortNum[k]=key;
        }
        }
        d=d/2;
        }

}


5.选择排序

从序列中找出第一小的排在第一位,然后找出第二小的排在第二位,以此类推

public void sort(int[] sortNum) {
int temp;
for(int i=0;i<sortNum.length;i++){
int minIndex=i;
for(int j=i+1;j<sortNum.length;j++){
if(sortNum[minIndex]>sortNum[j]){
minIndex=j;
}
}
if(i!=minIndex){
temp=sortNum[i];
sortNum[i]=sortNum[minIndex];
sortNum[minIndex]=temp;
}
}
}


6.堆排序

7.归并排序

 8.基数排序

非比较排序

0 0