快速排序 C++实现

Theory:

快排的基本思想:
1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。


Implement:

#include<iostream>
using namespace std;

void quick_sort(int array[], int start, int last)
{
    int i = start;
    int j = last;
    if (i < j)
    {
        int temp = array[i];
        while (i < j)
        {
            while (i < j && array[j]>=temp )
                j--;
            if (i < j)
            {
                array[i] = array[j];
                i++;
            }

            while (i < j && temp > array[i])
                i++;
            if (i < j)
            {
                array[j] = array[i];
                j--;
            }
                        
        }
        //把基准数放到i位置
        array[i] = temp;
        quick_sort(array, start, i - 1);
        quick_sort(array, i + 1, last);
    }
}

int main()
{
    int array[]={12,345,545,123,45,10,8,23,1,21};
    int len=sizeof(array)/sizeof(int);
    cout<<"The orginal array are:"<<endl;
    for(int i=0; i<len; ++i)
    {
        cout<< array[i] << " "; 
    }
    cout<<endl;
    quick_sort(array,0,len-1);
    cout<<"The sorted array are:"<<endl;
    for(int i=0; i<len; ++i)
    {
        cout<< array[i] << " "; 
    }
    cout<<endl;
    return 0;
}

Test结果:

The orginal arrayare:
12 345 545 123 45 10 8 23 1 21
The sorted arrayare:
1 8 10 12 21 23 45 123 345 545


Summary:

  • 快排是用分治的思想,取一个基准数,将数组化为左右两份, 左边的小,右边的大
  • 依次对左右两份再次划分,取基准;最后得到结果
快排的这个思想也可以用来求,数组中的第K大的值
  • 7
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值