zoukankan      html  css  js  c++  java
  • 3491=数据结构实验之排序八:快速排序

     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("
    ");
    36     }
    37     return 0;
    38 }
  • 相关阅读:
    bzoj3653: 谈笑风生
    bzoj1858: [Scoi2010]序列操作
    bzoj1857: [Scoi2010]传送带
    bzoj1856: [Scoi2010]字符串
    bzoj1855: [Scoi2010]股票交易
    bzoj1854: [Scoi2010]游戏
    bzoj1853: [Scoi2010]幸运数字
    斜堆,非旋转treap,替罪羊树
    NOI2003 文本编辑器
    A_star poj2449 k短路
  • 原文地址:https://www.cnblogs.com/Angfe/p/10392419.html
Copyright © 2011-2022 走看看