算法训练 快速排序

版权声明:个人博客:www.jingyile.cn 萌新发博文积累经验,欢迎各位大佬指导!!! https://blog.csdn.net/JYL1159131237/article/details/78758174

算法训练 快速排序  

时间限制:1.0s   内存限制:512.0MB

    

问题描述

  快速排序是最经常使用的一种排序方式,对于给定的n个数组成的一个数组,请使用快速排序对其进行排序。
  现给定一序列,请用快速排序将其按升序排序并输出。

输入格式

  第一行一个数N。
  第2~N+1行每行一个数,表示给定序列。

输出格式

  共N行,每行一个数,表示所求序列。

样例输入

5
1
4
2
3
4

样例输出

1
2
3
4
4

数据规模和约定

  共10组数据。
  对100%的数据,N<=10^5,所有数均为非负数且在int范围内。

快速排序算法,许久以前就学习过了,但日常依赖于对sort的使用,也很少码它的代码,借这道题熟悉熟悉。

#include <stdio.h>
int a[100005];
void quicksort(int left,int right)
{
    int i,j,t;
    if(left>right)
        return ;
    int temp=a[left];//存基准数
    i=left;
    j=right;
    while(i!=j)
    {
        //顺序很重要,先从右向左找
        while(a[j]>=temp&&i<j)
            j--;
        //在从左向右找
        while(a[i]<=temp&&i<j)
            i++;
        if(i<j)//未相遇
        {
            t=a[j];
            a[j]=a[i];
            a[i]=t;
        }
    }
    //将基准数归位
    a[left]=a[i];
    a[i]=temp;
    quicksort(left,i-1);//递归左边
    quicksort(i+1,right);//递归右边

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



展开阅读全文

没有更多推荐了,返回首页