• 排序算法实践——快速排序


    排序算法

    快速排序

    #自己试一试写写快排,回顾思路,用的递归,没用迭代

    //
    //  main.cpp
    //  QucikSort
    //
    //  Created by 陈洵 on 2020/10/7.
    //
    
    #include <iostream>
    #include <vector>
    using namespace std;
    
    //代码不简洁,但写一遍思路还是比较清晰了
    void quciksort(vector<int>& nums,int left,int right){
        int i = left, j = right;
        int standard = nums[left];//基准值
        int state = 0;//state记录此时是从左扫还是从右扫
        if(i == j) return;
        while(i!=j){
          //state=0从右往左扫找第一个比基准值小的点
            if(state == 0){
                while(nums[j] > standard && i < j){
                    j--;
                }
              //没找到这样的点,退出循环
                if(i==j) break;
              //找到了这样的点,交换位置并更改扫描方向state
                nums[i] = nums[j];
                i++;
                state = 1;
            }
          //state=1从右往左扫找第一个比基准值小的点
            if(state == 1){
                while (nums[i] < standard && i < j) {
                    i++;
                }
              //没找到这样的点,退出循环
                if(i==j) break;
              //找到了这样的点,交换位置并更改扫描方向state
                nums[j] = nums[i];
                j--;
                state = 0;
            }
        }
      //将基准值放在本轮递归的基准点(i==j)上
        nums[i] = standard;
      //在基准点左边递归快排(左边只有一个元素的时候不用排了)
        if(i-left>1)
            quciksort(nums, left, i-1);
      //在基准点右边递归快排(右边只有一个元素的时候也不用排了)
        if(right-i>1)
            quciksort(nums, i+1, right);
        return;
    }
    
    int main(int argc, const char * argv[]) {
        vector<int> vec;
        int temp=0;
        cout << "输入整数,以任意字母结束:" << endl;
        while(cin >> temp) //如果不确定输入数du字个数,可以用这种方式
        {
        vec.push_back(temp); //填充数据
        }
        int count = (int)vec.size();
        cout << "共有"<<count<<"个元素"<<endl;
        cout<<"排序前顺序:";
        for (int i=0;i<count;i++)
        {
        cout << vec[i]<<",";
        }
        quciksort(vec, 0, count-1);
        cout<<endl;
        cout<<"排序后顺序:";
        for (int i=0;i<count;i++)
        {
        cout << vec[i]<<",";
        }
        cout << endl;
        return 0;
    }
    
    

    ##输出结果:

  • 相关阅读:
    IDEA忽略某些文件
    Mac操作:Mac系统移动鼠标显示桌面(移动鼠标到角落)
    Mac流程图的软件
    Mac 电脑无法登陆 账号了
    学习如何管理-录视频
    项目倒入maven 遇到的问题只有 main 了
    下载代码的时候 SSH与http的区别
    Mac修改hosts方法
    MAC版本的UltraEdit破解方法
    intelliJ 社区版-找不到 plugins选项
  • 原文地址:https://www.cnblogs.com/garychen97/p/13779005.html
Copyright © 2020-2023  润新知