快速排列初识

快速排列的思想很牛逼

这里应该有非常丰富的解释:点击打开链接

//来一个快速排序。
#include<stdio.h>
void sort (int *a,int left,int right)
{
    if (left >= right){             //如果左边索引大于等于右边的索引就代表已经整理完成了一个组了
        return;
    }
    int i = left;
    int j = right;
    int key = a[left];
    while (i < j){                  //控制在当组内寻找一遍
        while (i < j&&key <= a[j]){ //而寻找的条件就是1.找个小于或者大于key的数(大于或小于取决于是
            j--;                        //升序还是降序)2.没有符合条件1的,并且i与j的大小没有反转;
        }                           //j -- 表示向前寻找
        a[i] = a[j];                //当找到了这样一个数的时候就把他赋给了前面被拿走的i的值
                                        //如果是第一次循环且key是a[left],那么就是给key
        while (i < j&&key >= a[i]){ //这是i在当前组内向前寻找,同上,不过左右两边的数大小与key的关系相反。排序的思想主要是把数往两边扔
            i ++;
        }
        a[j] = a[i];
    }
    a[i] = key;                     //当在当前组内找完一遍时,就把中间数key回归
    sort(a,left,i-1);               //最后用同样的方式对左边分出来的小组进行同上的做法
    sort(a,i+1,right);              //最后用同样的方式对右边分出来的小组进行同上的做法
                                        //当然最后可能会出现很多的左右,直到每一组的i=j为止
}
int main()
{
    int a[10] = {9,8,7,6,5,4,3,2,1,0};
    sort(a,0,9);
    int i;
    for (i = 0;i < 10;i ++)
        printf("%d",a[i]);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值