基於c++實現的幾種排序算法

插入排序是有一個已經有序的數據序列,在這個已經排好的數據數列中插入一個數,要求插入後此數據序列仍然有序。這種算法適用於少量數據的排序,時間複雜度爲O(n^2)

void insertsort(int a[],int len){
    for(int i=1;i<len;i++){
        int j=i-1;
        int key=a[i];
        while(j>=0 && a[j]>key){
            a[j+1]=a[j];
            j--;
        }   
        a[j+1]=key;
    
    }   
};

冒泡排序是相鄰的兩個元素比較,像開水冒泡一樣,每輪把最大或最小的元素放到最後,一直到所有輪走完,時間複雜度爲O(n^2)

void bubblesort(int a[],int len){
    for(int i=1;i<len;i++){
        for(int j=0;j<len-i;j++){
            if(a[j]>a[j+1]){
                int tmp=a[j+1];
                a[j+1]=a[j];
                a[j]=tmp;
            }   


        }   
    }   
}


選擇排序是一種簡單的排序算法,每次從待排序的數據中選出最小的元素放在序列起始的位置,直到全部待排序的數據都排完,時間複雜度爲O(n^2)
void selectsort(int a[],int len){
    for(int i=0;i<len;i++){
        int min=i;
        for(int j=i;j<len;j++){
            if(a[j]<a[min]){
                min=j;
            }   
        }   
        if(min!=i){
            int tmp=a[i];
            a[i]=a[min];
            a[min]=tmp; 
        }   
    }   
}

快速排序是找出一個元素作爲基準,然後對數組進行分區操作。使基準左邊的元素值都不大於基準值,基準右邊的元素都不小於基準值,最後基準元素調到排序後的正確位置。然後再把基準左邊和基準右邊的元素序列分別做以上操作。
void quicksort(int a[],int l,int r){ 
    int i=l;
    int j=r;
    int key=a[i];
    if(l<r){
        while(i<j){
            while(j>i && a[j]>key){
                j--;
            }   
            if(j>i){
                a[i]=a[j];
                i++;
            }   
            while(i<j && a[i]<key){
                i++;
            }   
            if(j>i){
                a[j]=a[i];
                j--;
            }   
        }   
        a[i] =key;
        quicksort(a,l,i-1);
        quicksort(a,i+1,r);
    
    }  
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章