c语言描述的快速排序法

#include<stdio.h>
#include<stdlib.h>
void QuikSort(int a[],int m,int n){
//第一个数作为关键字,比他大的放到他后面,比他小的放到他前面,分为两个子序列,然后对这两个子序列分别重复这个操作
    int low=m;
    int high=n;
    int temp=a[low];
    //开始这里我直接写成了temp=a[0]导致只要第一个数比后面的都小时就失败,
    //因为递归的时候不一定high +1就等于零的特别是对于在于关键字右边的序列!
    if(m<n){
      while(low<high){
      //这里有了low<high不代表里面的low<high就没有必要,每一个循环完了后high和low都要变化的!!
        while(low<high&&temp<a[high]){
        //从高位寻找小于temp的数组项并且赋值给低位
            high--;
        }
        a[low]=a[high];
        while(low<high&&temp>a[low]){
        //从低位寻找大于temp的数组项并且赋值给高位
            low++;
        }
        a[high]=a[low];
      }
      a[low]=temp;//a[high]=temp,将关键数据赋值给分割点
      QuikSort(a,m,low-1);//递归排序低位序列
      QuikSort(a,high+1,n);//递归排序高位序列
    }else{
        return ;
    }
}
void main(){
int i=0;
   
int a[]={1,5,8,4,6};

QuikSort(a,
0,4); for(;i<5;i++){ printf("%d ",a[i]); } }

 

转载于:https://www.cnblogs.com/zzy-frisrtblog/p/5710038.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值