【算法】常见算法

 冒泡排序

排序算法入门之冒泡排序    经典排序算法     冒泡排序的2种写法

 

快速排序

图解快速排序(C++实现)方法一         白话经典算法系列之六 快速排序 方法二         快速排序        C/C++实现快速排序(两种方式)

自己想的一种实现,,类似于方法二, 以 10  20  3  11  4  7  19  22  1 3

step 1: 以左边为基准数10,left = 0, right = 9;

从右边开始,搜索小于基准数10的值, 3, 交换left 和 right的值;  3  20  3  11  4  7  19  22  1 10  

交换一次,再从左边开始,搜索 大于基准数的值, 20,left = 1,  交换left 和 right的值,   3  10  3  11  4  7  19  22  1 20 

交换一次,再从右边开始,搜索 小于基准数的值, 1,right = 8,  交换left 和 right的值,   3  1  3  11  4  7  19  22  10 20 

交换一次,再从左边开始,搜索 大于基准数的值, 11,left = 11,  交换left 和 right的值,   3  1  3  10  4  7  19  22  11 20  

交换一次,再从右边开始,搜索 小于基准数的值, 7,right = 5,  交换left 和 right的值,   3  1  3  7  4  10  19  22  11 20 

交换一次,再从左边开始,搜索 大于基准数的值, left == right = 5,  基准数为10时排序结束,   3  1  3  7  4  10  19  22  11 20 

递归 0-4,6-9两部分

void quick_sort(vector<int>& arr, int l, int r)
{
    if(l>=r)
        return;
    if(l<0 || r>=arr.size())
        return;

    int left = l, right = r, tep = arr[l];
    while (left < right)
    {
        while(left < right && arr[right] >= tep) // 从右向左找第一个小于x的数
            right--;  
        if(left < right)
            swap(arr[left],arr[right]);
       
        while(left < right && arr[left] < tep) // 从左向右找第一个大于等于x的数
            left++;  
        if(left < right)
            swap(arr[left],arr[right]);
    }
    quick_sort(arr, l, left - 1); // 递归调用
    quick_sort(arr, left + 1, r);
   
}

 

堆排序

堆排序算法——C/C++      堆排序      白话经典算法系列之七 堆与堆排序        堆排序(绝对让你明白堆排序!)       

 

归并排序

白话经典算法系列之五 归并排序的实现      归并排序 详解         

 

posted @ 2022-07-01 13:49  星火-AI  阅读(31)  评论(0编辑  收藏  举报