算法笔记--快速排序

基本思想:

将当前待排序列分成两个部分、一个值。一个值:就是选定出一个值作为被比较的元素(基准数)。两个部分:所有比该被选定元素大的部分都去该元素的右边,所有比被选定元素小的部分都去该元素的左边。这样我们就确定了该元素在这个待排序列中的位置,其实也就是我们已经将这个元素“排好了”。

举例:


快速排序的每一轮处理其实就是将着一轮的基准数归位,直到所有的数都归位为止,排序就结束了。


算法实现:

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        for (int i = 0; i < 10; ++i) {
            scanf("%d", &number[i]);
        }
        quickSort(0, 9);
        for (int i = 0; i < 10; ++i) {
            printf("%d\t", number[i]);
        }
        
    }
    return 0;
}



//**【快速排序】**//
int number[10];
void quickSort(int left, int right) {
    
    if (left >= right) {
        return;
    }
    int temp = number[left];//基数
    int i = left;
    int j = right;
    
    while (i != j) {
        
        //从右向左走
        while (number[j] >= temp && i < j) {
            j--;
        }
        
        //从左向右走
        while (number[i] <= temp && i < j) {
            i++;
        }
        
        if (i < j) {//把大数换到右边,把小数换到左边
            int t = number[i];
            number[i] = number[j];
            number[j] = t;
        }
    }
    
    //交换基数
    number[left] = number[i];
    number[i]    = temp;
    
    
    quickSort(left, i-1);//左侧递归
    quickSort(j+1, right);//右侧递归
    return;
}
参考啊哈磊的《啊哈!算法》一书。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值