zoukankan      html  css  js  c++  java
  • 快速排序

    快速排序

    测试代码,使用一个通用测试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);
    }
    
  • 相关阅读:
    Web 前端 UI 组件库文档自动化方案 All In One
    how to auto open demo and create it in a new codesandbox
    TypeScript & Canvas 实现可视化白板
    2020~2021 职业规划书
    PostCSS All In One
    zsh terminal set infinity scroll height
    npm version ^ meaning
    vue-cli & webpack & vue.config.js
    [HDOJ5350]MZL's munhaff function
    [POJ3061]Subsequence
  • 原文地址:https://www.cnblogs.com/littlepage/p/11592944.html
Copyright © 2011-2022 走看看