【算法】穩定排序

穩定排序有 插入排序哦O(n^2) 冒泡排序O(n ^2) 歸併排序O(n log(n))

#include<iostream>
#include<stdlib.h>
#include<string.h>
using namespace std;
#define swap(a,b){\
    a^=b;b^=a;a^=b;\
}
//插入
void insert_sort(int *num , int n){
    for(int i = 1; i < n ;i++){
        for(int j = i; j >0 && num[j] < num[j - 1]; --j){
            swap(num[j], num[j - 1])
        }
    }
    return ;

}
//冒泡
void bubble_sort(int *num ,int n){
    int times =  1;
    for(int i = 1; i < n ;i++){
        times = 0;
        for(int j = 0; j < n -i ; j++){
            if(num[j] > num[j+1] ){
                swap(num[j], num[j + 1]);
                times++;
            }
        }
        if(times == 0){
            break;
        }

    }
}
//歸併排序
void merge_sort(int *num, int l, int r){
    if(r - l <= 1){
        if(r - l == 1 && num[l] > num[r]){
            swap(num[l],num[r]);
        }
        return ;
    }
    int mid = (l + r)/2;
    merge_sort(num, l , mid);
    merge_sort(num, mid + 1 ,r);
    int *temp =(int *) malloc(sizeof(int)*(r - l + 1));
    int p1 = l, p2 = mid + 1,k = 0;
    while(p1 <= mid || p2 <= r){
        if(p2 > r || (p1 <= mid && num[p1] <= num[p2])){
            temp[k++] = num[p1++];
        }else{
            temp[k++] = num[p2++];
        }
    }
    memcpy(num + l, temp, sizeof(int) * (r - l + 1));
    free(temp);
    return ;
}


int main(){
    int data[10]={4,3,2,1,4,6,5,4,3,6};
    //insert_sort(data, 10);
//    bubble_sort(data,10);
    merge_sort(data,0,9);
    for(int i = 0 ;i < 10; i++){
        cout<<data[i]<<" ";
    }
    return 0;
}

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