zcmu-2149(归并排序)
生活随笔
收集整理的這篇文章主要介紹了
zcmu-2149(归并排序)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
2149: wjw的排序問(wèn)題
Time Limit:?1 Sec??Memory Limit:?128 MBSubmit:?58??Solved:?18
[Submit][Status][Web Board]
Description
菜雞wjw覺(jué)得最近對(duì)排序算法的理解又上了一個(gè)檔次,于是準(zhǔn)備研究一下自己會(huì)的所有排序算法,經(jīng)過(guò)測(cè)試,他寫的所有代碼里最快的只有一句話"std::sort(a,a+len)",于是他終于發(fā)現(xiàn)自己依舊是個(gè)菜雞...
那么問(wèn)題來(lái)了,如果不用"std::sort()",你能寫出什么樣的排序代碼呢?
Input
一組數(shù)據(jù),第一行一個(gè)n表示序列長(zhǎng)度(1<=n<=3000000)
第二行包含n個(gè)數(shù)字,用空格隔開
Output
升序排序后的結(jié)果,用空格隔開,末尾沒(méi)有空格
Sample Input
51 3 2 4 5Sample Output
1 2 3 4 5解析:先說(shuō)std的sort()函數(shù),最快時(shí)間復(fù)雜度為nlogn,最慢為n2;
有這么一張表:
最好的算法也就是歸并了,比較穩(wěn)定,快速排序在最壞的情況就是每個(gè)數(shù)都相同,這時(shí)間n2,但是可以稍加修改,可以變到穩(wěn)定的nlogn,這點(diǎn)自行百度。
#include<bits/stdc++.h> using namespace std;int n; void merge(int arr[],int l,int mid,int r) {int *T=new int[r-l+1];for(int i=l; i<=r; i++){T[i-l]=arr[i];}int i=l,j=mid+1;for(int k=l; k<=r; k++){if(i>mid){arr[k]=T[j-l];j++;}else if(j>r){arr[k]=T[i-l];i++;}else if(T[i-l]<T[j-l]){arr[k]=T[i-l];i++;}else if(T[i-l]>=T[j-l]){arr[k]=T[j-l];j++;}}delete []T; } void merge_sort(int arr[],int l,int r) {if(l>=r)return;int mid =(l+r)/2;merge_sort(arr,l,mid);merge_sort(arr,mid+1,r);if(arr[mid]>arr[mid+1]){merge(arr,l,mid,r);} } int main() {while(~scanf("%d",&n)){int *a=new int[n];for(int i=0; i<n; i++)scanf("%d",&a[i]);merge_sort(a,0,n-1);for(int i=0; i<n-1; i++)printf("%d ",a[i]);printf("%d\n",a[n-1]);delete []a;}return 0; }與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖
總結(jié)
以上是生活随笔為你收集整理的zcmu-2149(归并排序)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C4996 'fopen': Th
- 下一篇: 领导者的资质——学习笔记(1)