用快速排序方法对数据进行增序排列(C语言实现)

利用快速排序方法的递归调用实现增序排列
(做笔记,便于复习)

#include <stdio.h>

int m,x,i,j;
int h[50];//顺序表最大存储

creatb(int h[])//创建顺序表
{
    printf("input data:\n");
    scanf("%d",&x);
    i=0;
    while(x!=0)
    {
        i++;
        h[i]=x;
        scanf("%d",&x);
    }
}

int parttion(int h[],int low,int high)//一次划分,成两段
{
    x=h[low];//取第一个值为枢轴
    while(low<high)//low=high时退出
    {
        while((low<high)&&(h[high]>=x))//找到high之前的第一个比枢轴x小的
            high--;
        if(low<high)
        {
            h[low]=h[high];//找到high之前的第一个比枢轴x小的新值high赋值给前面low
            low++;//可以不要,后面会有这一步
        }

        while((low<high)&&(h[low]<x))//找到low之后的第一个比枢轴x大的新值
            low++;
        if(low<high)
        {
            h[high]=h[low];//找到low之后的第一个比枢轴x大的新值low赋值给后面high
            high--;//可以不要
        }
    }
    h[low]=x;//将枢轴x赋值给low索引的值并返回
    return low;
}

quicksort(int h[],int low,int high)//递归快速排序
{
    if(low<high)
    {
        j=parttion(h,low,high);//j为一次排序后的枢轴
        quicksort(h,low,j-1);//前段:j-1作为high
        quicksort(h,j+1,high);//后段:j+1作为low
    }
}

outb(int h[])//输出顺序表
{
    for(m=1;m<=i;m++)
        printf("%4d",h[m]);
}

main()
{
    creatb(h);
    printf("排序前:\t");
    outb(h);
    quicksort(h,1,i);
    printf("\n排序后:\t");
    outb(h);
}

欢迎指正!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值