#include <stdio.h>
#include <stdlib.h>
#pragma comment(linker,"/STACK:1073741824")const int maxn=1000001;
int A[maxn];voidswap(int &a, int &b){
int c = a; a = b; b = c;}
int partition(int arr[], int low, int high){swap(arr[low+rand()%(high-low+1)],arr[high]);//避免出现从小到大这种糟糕情况出现,降低时间复杂度
int pivot = arr[high], i = low;for(int j = low; j < high; j++){if(arr[j]<=pivot){swap(arr[i++],arr[j]);}//add something here}swap(arr[i],arr[high]);return i;//add something here}voidquickSort(int arr[], int low, int high){if(low < high){
int k =partition(arr, low, high);if(k!=low)quickSort(arr,low,k-1);if(k!=high)quickSort(arr,k+1,high);}//add something here//add something here}
int main(){
int n;scanf("%d",&n);for(int i=0; i<n; i++)scanf("%d",&A[i]);quickSort(A,0, n-1);//change this sentence注意上下标for(int i=0; i<n; i++)printf("%d ",A[i]);return0;}
二、归并排序(mergesort)
#include<stdio.h>const int maxn=1000001;
int A[maxn];voidmerge(int arr[], int left, int middle, int right){
int i, j;
int n1=middle-left+1, n2=right-middle;
int L[n1],R[n2];for(i=0;i<n1;i++)L[i]=arr[left+i];for(j=0;j<n2;j++)R[j]=arr[middle+1+j];
int k=left;
i=0;j=0;while(i<n1&&j<n2){//把两个序列sort成一个序列if(L[i]<=R[j]){
arr[k++]=L[i++];}else{
arr[k++]=R[j++]}}while(i<n1)arr[k++]=L[i++];while(j<n2)arr[k++]=R[j++];/* Please fill this part:
merge (L[0],...,L[n1-1]) with (R[0],...,R[n2-1]) and store the result (in sorted order) in arr[left],...,arr[right]. */}voidmergesort(int arr[],int left, int right){if(left<right){
int middle=(left+ right)/2;mergesort(arr,left,middle);mergesort(arr,middle+1,right);merge(arr,left,middle,right);//add something here. Think it by yourself}}
int main(){
int n;scanf("%d",&n);for(int i=0;i<n;i++)scanf("%d",&A[i]);mergesort(A,0,n-1);//edit this sentencefor(int i=0;i<n;i++)printf("%d ",A[i]);}