快速排序 数组实现

快速排序 数组实现


快速排序的基本方法是在n个元素中任取一个元素(本代码取第一个元素)作为基准,将该基准放入正确位置,小于基准的数据组成的子序列放在左侧,大于基准的数组组成的子序列放在右侧。(即Partition函数)对两个子序列重复上述操作,直至每个子序列只有一个元素或空为止。(即QuickSort函数)
时间复杂度:O(nlogn)
#include<stdio.h>

void disp(int a[],int n)//进行交换的一个函数
{
    int i;
    for(i=0;i<n;i++)
        printf("%d ",a[i]);
    printf("\n");
}

int Partition(int a[],int s,int t)//核心操作
{
   int i=s,j=t;
   int tmp=a[s];//将基准定在数组首个元素
   while(i!=j)
   {
       while(j>i&&a[j]>=tmp)
        j--;//右指针左移,相比左指针,右必须先移动
       a[i]=a[j];//已被tmp保存值的位置,放入右侧违规值
       while(i<j&&a[i]<=tmp)
        i++;//左指针右移
       a[j]=a[i];//左侧违规值放入右侧空余位置
   }
   a[i]=tmp;//基准值进入正确位置
   return i;
}

void QuickSort(int a[],int s,int t)//进行递归
{
    if(s<t)
    {
        int i=Partition(a,s,t);
        QuickSort(a,s,i-1);
        QuickSort(a,i+1,t);
    }
}

void main()
{
    int n;
    int a[100];
    int x=0;
    printf("how many numbers\n");
    printf("the numbers\n");
    scanf("%d\n",&n);
    for(;x<n;x++)
    {
        scanf("%d",&a[x]);
    }
    QuickSort(a,0,n-1);
    disp(a,n);
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值