#include<iostream>usingnamespace std;constint N =1e6+10;int a[N];voidquick_sort(int a[],int l,int r){if(l >= r)return;int i = l -1,r = r +1,x = a[(l + r )>>1]while(i < j){while(a[++i]< x);while(a[--j]> x);if(i < j)swap(a[i],a[j]);}quick_sort(a,l,j);quick_sort(a,j+1,r);}intmain(){int n;scanf("%d",&n);for(int i =0; i < n; i++)scanf("%d",&a[i]);quick_sort(a,0,n-1);for(int i =0; i < n ; i++)printf("%d",a[i]);return0;}
归并排序:
思路:
确定分界点(索引的中间值),将数组从中间分开
递归排序左边和右边
归并
代码模板:
#include<iostream>usingnamespace std;constint N =1e6+10;int a[N],tmp[N];int n;voidmerge_sort(int a[],int l,int r){if( l>= r)return;int mid = l + r >>1;merge_sort(a,l,mid);merge_sort(a,mid +1,r);int i = l,j = mid +1,k =0;while(i < mid && j < r){if(a[i]< a[j])tmp[k++]= a[i++];else tmp[k++]= a[j++];}while(i <= mid)tmp[k++]= a[i++];while(j <= r)tmp[k++]= a[j++];for(int i = l,j =0;i < r;i++,j++)a[i]= tmp[j];}intmain(){scanf("%d",&n);for(int i =0;i < n; i++)sacnf("%d",&a[i]);merge_sort(a,0,n-1);for(int i =0;i < n ;i++)printf("%d",a[i]);return0;}