首页 > 编程语言 > 详细

排序算法总结

时间:2019-04-04 19:22:11      阅读:132      评论:0      收藏:0      [点我收藏+]

 

O(n2)的冒泡,选择,插入,先不贴,先贴归并,快排,堆排,

O(nlog(n))

归并排序

二路归并递归写法:时间O(nlog(n)),稳定,总时间O(nlog),空间:O(n+log(n)),n为内存,log(n)为栈空间

#include<bits/stdc++.h>
using namespace std;

//归并过程
void merge(int arr[], int l, int mid, int r){
    int len=r-l+1;//合并长度
    vector<int> help; //临时数组
    int lindex = l;
    int rindex = mid+1;
    while(lindex<=mid && rindex<=r){
        if(arr[lindex]<arr[rindex]){
            help.push_back(arr[lindex++]);
        }else{
            help.push_back(arr[rindex++]);
        }
    }
    while(lindex<=mid){
        help.push_back(arr[lindex++]);
    }
    while(rindex<=r){
        help.push_back(arr[rindex++]);
    }
    for(int i=0;i<len;i++){
        arr[l+i]=help[i];
    }
}

void mergesort(int arr[], int l,int r){
    if(l==r) return;
    int mid=(r+l)/2;
    mergesort(arr,l,mid);
    mergesort(arr,mid+1,r);
    merge(arr,l,mid,r);
}

int main(){
    int n;
    while(cin >> n){
        int arr[n];
        for(int i = 0; i < n; i++) cin>>arr[i];
        mergesort(arr, 0,n-1);//排序数组,和起始终止de下标

        for(int i = 0; i < n; i++){
            cout << arr[i] << " ";
        }
        cout << endl;
    }
    return 0;
}
/*
10
8 6 7 9 2 3 4 1 0 5
*/

 

排序算法总结

原文:https://www.cnblogs.com/joelwang/p/10656498.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!