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

    思路

    前面和 快速排序1 的思想大致一样

    1. 找一个基准数先将数组分成三部分(小于基准数部分,基准数,大于基准数部分)再进而递归
    2. 区别在于for循环部分
    3. 设置一个i,将小于基准数p的部分放在arr[l+1,j]中,将大于基准数p的部分放在arr[j+1,r]中
    4. 即判断arr[i]与p的关系,如果arr[i]<p,将arr[i]与arr[j+1]的值交换,然后j++
    5. 最后将arr[l]与arr[j]交换,完成arr[l,j-1]<p,arr[j]=p,arr[j+1]>p
    

    代码

    #include <stdio.h>
    
    void _quick_sort(int arr[],int l,int r){
        if(l>=r){
            return;
        }
        int p = arr[l];//设置基准数
        int j = l;
        
        // arr[l+1,j]<p; arr[j+1,i]>p
        for (int i = l+1; i<=r; i++) {
            if(arr[i]<p){// <p 放到arr[l+1,j]中
                j++;
                //交换
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;       
            }
            //其他的不做处理自然进入了arr[j+1,r]这一段数组中
        }
        
        //最终结果 arr[l,j-1] < p,arr[j] = p,arr[j+1,r]>p
        int temp = arr[l];
        arr[l] = arr[j];
        arr[j] = temp;
        //递归处理左右部分
        _quick_sort(arr, l, j-1);
        _quick_sort(arr, j+1, r);
        
    }
    
    
    int quick_sort(int arr[],int n){
        
        _quick_sort(arr,0,n-1);
        
        return 0;
    }
    
    
    
    int main(int argc, const char * argv[]) {
        // insert code here...
        int arr[] = {9,2,1,6,5,4,3};
        quick_sort(arr, 7);
        for (int i = 0; i<7; i++) {
            printf("%d
    ",arr[i]);
        }
        return 0;
    }
    
  • 相关阅读:
    植物:吊兰
    植物:文竹
    理论:混沌理论
    图书-数学:《数学之美》
    调味品:味精
    linux查看文件大小df-du
    linux防火墙开启-关闭
    tomcat端口号、日志、启停
    chmod
    jdk-tomcat环境变量设置
  • 原文地址:https://www.cnblogs.com/zheng-chuang/p/6858885.html
Copyright © 2011-2022 走看看