【数据结构与算法】笔记--快速选择算法

快速选择算法:

#include <iostream>
#include "windows.h"

#include <vector>
#include <algorithm>


void Swap(vector <int>& arr, int i, int j)
{
    int tmp = arr[i];
    arr[i] = arr[j];
    arr[j] = tmp;
}

int Partition(vector <int>& arr, int left, int right)
{
    ///以arr[right]作为划分基准       ----快速掌握看法:看返回的j的索引如何变的
    int j = left - 1;
    for (int i = left; i < right; i++)
    {
        if (arr[i] <= arr[right])
            Swap(arr, i, ++j);

        for (auto value : arr)
        {
            std::cout << value << "    ";
        }
    }
    Swap(arr, ++j, right);

    for (auto value : arr)
    {
        std::cout << value << "    ";
    }

    return j;

    /* 以arr[left]作为基准 */   --快速掌握看法:看返回的left的索引是如何变的
    int val = arr[left];
    while (left < right)
    {
        while (left < right && arr[right] >= val)
            right--;

        arr[left] = arr[right];

        for (auto value : arr)
        {
            std::cout << value << "    ";
        }
        std::cout << "" << std::endl;

        while (left < right && arr[left] <= val)
            left++;

        arr[right] = arr[left];

        for (auto value : arr)
        {
            std::cout << value << "    ";
        }
        std::cout << "" << std::endl;
    }
    arr[left] = val;

    for (auto value : arr)
    {
        std::cout << value << "    ";
    }
    return left;
}

int main()
{
    std::vector<int> vecTestgg{ 4,1,2,5,6,7,8,6,5 ,100,200,300,45,66,42,17,89,65,33,15,24 };

    for (auto value : vecTestgg)
    {
        std::cout << value << "    ";
    }
    std::cout << "-------------------------------------" << endl;

    int nLeft = 0;
    int nRight = vecTestgg.size() - 1;

    int hh = Partition(vecTestgg, nLeft, nRight);

    std::cout << "hh:" << hh << "  value:" << vecTestgg[hh] << endl;;
    for (auto value : vecTestgg)
    {
        std::cout << value << "    ";
    }

    system("pause");
}


结果:
返回的索引的数据,前面的是小于它的,后面的是大于它的


打印结果如下:
[
Partition函数以右边为基准情况:
4    1    2    5    6    7    8    6    5    100    200    300    45    66    42    17    89    65    33    15    24    
-------------------------------------
4    1    2    5    6    7    8    6    5    100    200    300    45    66    42    17    89    65    33    15    24    
4    1    2    5    6    7    8    6    5    100    200    300    45    66    42    17    89    65    33    15    24    
4    1    2    5    6    7    8    6    5    100    200    300    45    66    42    17    89    65    33    15    24    
4    1    2    5    6    7    8    6    5    100    200    300    45    66    42    17    89    65    33    15    24    
4    1    2    5    6    7    8    6    5    100    200    300    45    66    42    17    89    65    33    15    24    
4    1    2    5    6    7    8    6    5    100    200    300    45    66    42    17    89    65    33    15    24    
4    1    2    5    6    7    8    6    5    100    200    300    45    66    42    17    89    65    33    15    24    
4    1    2    5    6    7    8    6    5    100    200    300    45    66    42    17    89    65    33    15    24    
4    1    2    5    6    7    8    6    5    100    200    300    45    66    42    17    89    65    33    15    24   
 4    1    2    5    6    7    8    6    5    100    200    300    45    66    42    17    89    65    33    15    24    
4    1    2    5    6    7    8    6    5    100    200    300    45    66    42    17    89    65    33    15    24    
4    1    2    5    6    7    8    6    5    100    200    300    45    66    42    17    89    65    33    15    24    
4    1    2    5    6    7    8    6    5    100    200    300    45    66    42    17    89    65    33    15    24    
4    1    2    5    6    7    8    6    5    100    200    300    45    66    42    17    89    65    33    15    24    
4    1    2    5    6    7    8    6    5    100    200    300    45    66    42    17    89    65    33    15    24    
4    1    2    5    6    7    8    6    5    17    200    300    45    66    42    100    89    65    33    15    24    
4    1    2    5    6    7    8    6    5    17    200    300    45    66    42    100    89    65    33    15    24    
4    1    2    5    6    7    8    6    5    17    200    300    45    66    42    100    89    65    33    15    24   
 4    1    2    5    6    7    8    6    5    17    200    300    45    66    42    100    89    65    33    15    24    
4    1    2    5    6    7    8    6    5    17    15    300    45    66    42    100    89    65    33    200    24   
 4    1    2    5    6    7    8    6    5    17    15    24    45    66    42    100    89    65    33    200    300    

hh:11  value:24
4    1    2    5    6    7    8    6    5    17    15    24    45    66    42    100    89    65    33    200    300    
请按任意键继续. . .


---------------------
Partition函数以左边为基准情况:
4    1    2    5    6    7    8    6    5    100    200    300    45    66    42    17    89    65    33    15    24    
-------------------------------------
2    1    2    5    6    7    8    6    5    100    200    300    45    66    42    17    89    65    33    15    24    
2    1    2    5    6    7    8    6    5    100    200    300    45    66    42    17    89    65    33    15    24    
2    1    4    5    6    7    8    6    5    100    200    300    45    66    42    17    89    65    33    15    24   

hh:2  value:4
2    1    4    5    6    7    8    6    5    100    200    300    45    66    42    17    89    65    33    15    24    
请按任意键继续. . .

]
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值