1 #include <stdio.h> 2 void sort(int a[],int left,int right)//可以理解为一个区域的数据和左、右端点。 3 { 4 int temp=a[left],i=left,j=right;//temp的作用是将一个数值储存起来,因为两个数值无法做到直接交换,要有一个中间变量。 5 if(i>=j)return;//当右端点在左端点左边或者重合时结束。 6 while(i<j) 7 { 8 while(i<j&&a[j]>=temp)//最左边是储存的点,因为要从右边开始,把已经储存的点给覆盖。 9 j--;//从右边开始找一个比啊a[left]小的数。 10 a[i]=a[j];//将这个数放置在a[left]左边。 11 while(i<j&&a[i]<=temp)//总体结束时i=j。 12 i++;//从左边开始找一个比啊a[left]大的数。 13 a[j]=a[i];//将这个数放置在a[left]右边。 14 } 15 a[i]=temp; 16 sort(a,left,i-1); 17 sort(a,i+1,right);//递归的调用,第i个数作为中间数固定不动。 18 } 19 int main() 20 { 21 int i,n; 22 int a[100000];//题目要求的数组大小。 23 while(scanf("%d",&n)!=EOF) 24 { 25 for(i=0; i<n; i++) 26 { 27 scanf("%d",&a[i]); 28 } 29 sort(a,0,n-1); 30 for(i=0; i<n; i++) 31 { 32 if(i!=0)printf(" "); 33 printf("%d",a[i]); 34 } 35 printf("\n"); 36 } 37 return 0; 38 }
原文地址:https://www.cnblogs.com/Angfe/p/10392419.html
时间: 2024-10-03 21:40:19