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);
    }
    
  • 相关阅读:
    mysql json 嵌套数组查询
    Centos 部署 mysql
    Mysql8.0 导出数据库文档
    MySQL常用Json函数
    java Dateutil 操作类
    雪花算法生成的ID,前端无法使用
    Mysql 一个字段匹配多个字符
    EntityManager 获取 List<T>
    高级软件工程第二次作业:随机生成N个不重复的已解答完毕的数独棋盘
    调研《构建之法》指导下的全国高校优秀实践作品三篇
  • 原文地址:https://www.cnblogs.com/littlepage/p/11592944.html
Copyright © 2011-2022 走看看