• 快速排序


    快速排序

    测试代码,使用一个通用测试c++代码,代码如下

    #include <iostream>
    #include <ctime>
    #include <cstdlib>
    using namespace std;
    int main(){
        int val[10];
        srand((unsigned int)time(0));//随机数种子
        for(int i=0;i<10;i++) val[i]=(int)rand();//生成随机数
        for(int i=0;i<10;i++) cout<<val[i]<<" ";//输出初始数字
        cout<<endl;
        //这边调用排序方法
        for(int i=0;i<10;i++) cout<<val[i]<<" ";//输出排序后的数字
        cout<<endl;
        system("pause");
        return 0;
    }
    

    1.经典快速排序

    伪代码

    quick_sort(int* arr,int left,int right){
    	if left>right 递归终止
    	pivot = get_index(arr,left,right)
    	quick_sort(arr,0,pivot-1)
    	quick_sort(arr,pivot+1)
    }
    get_index(int* arr,int left,int right){
    	tmp=arr[left]
    	while left<right
    		while left<right and arr[right]>=tmp
    			right--
    		arr[left]=arr[right]
    		while left<right and arr[left]<=tmp
    			left++
    		arr[right]=arr[left]
    	arr[left]=tmp
    	return left
    }
    

    主要思想

    1.找到pivot,进行左右递归,递归终止条件,左边数小于右边数

    2.找到pivot方法,进行记住左边的数

    ​ 当右边数大于记住的数,右边指针左移

    ​ 右值赋值到左边

    ​ 当左边数小于记住的数,左边指针右移

    ​ 将左值移动到右边

    ​ 左值填充记住的数字

    C语言代码实现

    int get_index(int* arr,int left,int right){
        int tmp=arr[left];
        while(left<right){
            while(left<right&&arr[right]>=tmp) right--;
            arr[left]=arr[right];
            while(left<right&&arr[left]<=tmp) left++;
            arr[right]=arr[left];
        }
        arr[left]=tmp;
        return left;
    }
    void quick_sort(int* arr,int left,int right){
        if(left>right) return;
        int pivot=get_index(arr,left,right);
        //left是中介点
        quick_sort(arr,0,pivot-1);
        quick_sort(arr,pivot+1,right);
    }
    
  • 相关阅读:
    Excel常用公式函数之文本查找某个符号
    Excel常用公式函数之日期格式转换成文本格式
    Excel常用公式函数之数据是否相等
    Excel常用公式函数之数据筛选、数据统计
    Excel常用公式函数之字符串拼接、字符串连接
    Excel常用公式函数之MID文本提取
    Excel常用技巧汇总
    netty面试题整理
    mqtt通配符订阅
    SQL | substring_index 字符串拆分
  • 原文地址:https://www.cnblogs.com/littlepage/p/11592944.html
Copyright © 2020-2023  润新知