码迷,mamicode.com
首页 > 编程语言 > 详细

C语言排序---快速排序

时间:2016-07-08 21:43:09      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:

/* 快速排序由C. A. R.Hoare在1962年提出,是对冒泡排序的一种改进。
* 它的基本思想是:
* 通过一趟排序将要排序的数据分割成独立的两部分
* ,其中一部分的所有数据都比另外一部分的所有数据都要小
* ,然后再按此方法对这两部分数据分别进*/

#include<stdio.h>
#define N 30
int QSort(int a[N],int l,int r)
{
  int m,i,j,p;

  if(l>=r)return 0; /*递归出口,当序列长度小于等于0时,视为排序结束*/
  i=l;j=r;
  p=a[l]; /*取a[l]为基准元素*/
  while(i<j)
  {
    while(a[j]>=p&&j>i) /*从a[j]往后搜索,将比基准元素p大的元素找出来*/
    j--;
    if(i<j)
    a[i]=a[j]; /*将找出来的元素放进序列左边,将序列右边挖坑*/

    while(a[i]<p&&i<j) /*从a[i]往后搜索,将比基准元素p小的元素找出来*/
    i++;
    if(i<j)
    a[j]=a[i]; /*将找出来的元素放进序列右边,将序列左边挖坑*/
  }
  a[i]=p; /*划分结束,将标准元素填入最后一个坑*/
  QSort(a,l,j-1); /*递归调用,将序列分成两段*/
  QSort(a,j+1,r);
}
void main()
{
  int i,n;
  int a[N]={0};

  printf("请输入序列长度:");
  scanf("%d",&n);
  printf("请输入该序列:\n");
  for(i=0;i<n;i++)
  scanf("%d",&a[i]);

  QSort(a,0,n-1);

  printf("排序之后是:");
  for(i=0;i<n;i++)
  printf("%d ",a[i]);
  printf("\n");


}

C语言排序---快速排序

标签:

原文地址:http://www.cnblogs.com/changgong391/p/5654518.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!