快速排序
时间限制(普通/Java) :
1000 MS/ 3000 MS 运行内存限制 : 65536 KByte
总提交 : 1176 测试通过 : 437
总提交 : 1176 测试通过 : 437
比赛描述
给定输入排序元素数目n和相应的n个元素,写出程序,利用内排序算法中快速排序算法进行排序,并输出排序最后结果的相应序列。
输入
共两行,第一行给出排序元素数目n,第二行给出n个元素,1≤n≤100000,每个元素值范围为 [0,100000)
输出
一行,输出排序结果。
样例输入
7
48 36 68 72 12 48 2
样例输出
2 12 36 48 48 68 72
# include<stdio.h>
# include<malloc.h>
void quick_sort(int s[], int l, int m)
{
if (l < m)
{
//Swap(s[l], s[(l + r) / 2]); //将中间的这个数和第一个数交换 参见注1
int i = l, j = m, x = s[l];
while (i < j)
{
while(i < j && s[j] >= x) // 从右向左找第一个小于x的数
j--;
if(i < j)
s[i++] = s[j];
while(i < j && s[i] < x) // 从左向右找第一个大于等于x的数
i++;
if(i < j)
s[j--] = s[i];
}
s[i] = x;
quick_sort(s, l, i - 1); // 递归调用
quick_sort(s, i + 1, m);
}
}
int main()
{
int m,t;
scanf("%d",&m);
int* a=(int*)malloc(sizeof(int)*m);
for(t=0;t<m;t++) scanf("%d",&a[t]);
quick_sort(a,0,m-1);
for(t=0;t<m;t++)
{
if(t==0)
printf("%d",a[t]);
else
printf(" %d",a[t]);
}
free(a);
return 0;
}
------------------------------------------------------------------------------------------
一道快速排序的入门题,水过
------------------------------------------------------------------------------------------