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

/* 快速排序由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");


}

转载于:https://www.cnblogs.com/changgong391/p/5654518.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值