普及练习场-排序-P1177 【模板】快速排序

题目描述
利用快速排序算法将读入的N个数从小到大排序后输出。

快速排序是信息学竞赛的必备算法之一。对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成。(C++选手请不要试图使用STL,虽然你可以使用sort一遍过,但是你并没有掌握快速排序算法的精髓。)

输入输出格式
输入格式:

输入的第1行为一个正整数N,第2行包含N个空格隔开的正整数a[i],为你需要进行排序的数,数据保证了A[i]不超过1000000000。

输出格式:

将给定的N个数从小到大输出,数之间空格隔开,行末换行且无空格。

输入输出样例
输入样例#1:

5
4 2 4 5 1

输出样例#1:

1 2 4 4 5
————————————————
思路:快速排序算法模板
void quick_sort(int q[], int l, int r)
{
if (l >= r) return;

int i = l - 1, j = r + 1, x = q[l + r >> 1];
while (i < j)
{
    do i ++ ; while (q[i] < x);
    do j -- ; while (q[j] > x);
    if (i < j) swap(q[i], q[j]);
}
quick_sort(q, l, j), quick_sort(q, j + 1, r);

}

========================

#include <stdio.h>
int a[100000+100];
void quicksort(int left,int right){
 int i=left,j=right,t;
 int mid=a[(left+right)/2]; 
 while(i<=j){
 while(a[i]<mid)
 i++;
 while(a[j]>mid)
 j--;
if(i<=j){
 t=a[i];
 a[i]=a[j];
 a[j]=t;
i++;
j--;
}
 }
 if(i < right)
 quicksort(i,right);
if(left < j)
 quicksort(left,j);

}
int main(){
 int n;
 int i;
 scanf("%d",&n);
for(i=0;i<n;i++)
 scanf("%d",&a[i]);
 quicksort(0,n-1);
 printf("%d",a[0]);
  for(i=1;i<n;i++)
 printf(" %d",a[i]);
 printf("\n");
 return 0;
}

发布了80 篇原创文章 · 获赞 1 · 访问量 1490

猜你喜欢

转载自blog.csdn.net/zqhf123/article/details/104339818