前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >快速排序算法从难到易实现

快速排序算法从难到易实现

作者头像
用户9831583
发布2022-06-16 14:18:45
1780
发布2022-06-16 14:18:45
举报
文章被收录于专栏:码出名企路

难实现:

代码语言:javascript
复制
/*
编写一个程序,将一个整型数组中的数据从大到小排列,要求使用快速排序
*/

#include <iostream>
using namespace std;

//快速排序是先挑选一个基准,把比它小的放在左边,比它大的放在右边
//之后在他的左边继续挑选一个基准,执行上述过程
//在它右边也是一样
void swap(int *a,int *b)
{                            /*交换序列中元素的位置*/
  int tmp;
  tmp = *a;
  *a = *b;
  *b = tmp;
}

//s,t表示每一序列的首尾元素
void quickSortArray(int array[], int s,int t)
{
    int low,high;
    if(s<t)
    {
        low = s;
        high = t+1;
        while(1)
        {
            do low++;
            while(array[low]>=array[s] && low!=t);        /*array[s]为基准元素,重复执行low++操作*/

            do high--;
            while(array[high]<=array[s] && high!=s);      /*array[s]为基准元素,重复执行high--操作*/

            if(low<high)
                swap(&array[low],&array[high]);           /*交换array[low]和array[high]的位置*/
            else
                break;
        }
        
        swap(&array[s],&array[high]);                   /*将基准元素与array[high]进行交换*/
        quickSortArray (array,s,high-1);                /*将基准元素前面的子序列快速排序*/
        quickSortArray (array,high+1,t);                /*将基准元素后面的子序列快速排序*/
    }
}

void quickSort(int array[], int arraySize) {
  quickSortArray(array, 0, arraySize-1);
}

main()
{
    int i,array[10];
    printf("Input ten integer\n");
    for(i=0;i<10;i++)
    {
        scanf("%d",&array[i]);                /*循环输入10个整数*/
    }

    quickSort(array,10);                     /*执行快速选择排序*/
    printf("\nThe result of quick sort is\n");
    for(i=0;i<10;i++) {
        printf("%d ",array[i]);                    /*输出排序后的结果*/
  }
    getchar();
  getchar();
}

易实现:

代码语言:javascript
复制
#include <algorithm>
#include <cassert>
#include <functional>
#include <iterator>
#include <iostream>
using namespace std;

//先找到中间位置元素,mid
//std::partition 比较比 mid 小的和大的
//最后两部分递归调用快速排序

//C++ 14
template <class Fd, class Compare=std::less<Fd>>

void quick_sort(Fd first, Fd last, Compare cmp=Compare{})
{
    auto const N=std::distance(first,last);
    if(N<=1) return;

    auto const mid=*std::next(first,N/2);
    auto const mid1=std::partition(first,last,[=](auto const& elem){
        return cmp(elem,mid) ; });
    

     auto const mid2=std::partition(mid1,last,[=](auto const& elem){
        return !cmp(mid,elem); });
    

    quick_sort(first,mid1,cmp);
    quick_sort(mid2,last,cmp);

}

int main()
{
    std::vector<int> data={0,3,1,2,4,6,6,10,5};
    
    quick_sort(data.begin(),data.end(),std::less<int>());

    for(int i=0;i<data.size();i++)
        cout<<data[i]<<endl;
    return 0;
}

博主:菜鸟程序员

初衷:学习资料,程序设计,视觉算法,求职经验,工作心得

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码出名企路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档