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;
    }
    
  • 相关阅读:
    [BZOJ1143/2718]祭祀river/毕业旅行
    [BZOJ4403]序列统计
    [BZOJ2006][NOI2010]超级钢琴
    [BZOJ2005][NOI2010]能量采集
    [BZOJ3631][JLOI2014]松鼠的新家
    第一个spring,总结!
    第一个spring,第五天。
    第一次spring,第三天。
    第一个spring,第一天。
    软件工程课程设计——第一个Spring
  • 原文地址:https://www.cnblogs.com/zheng-chuang/p/6858885.html
Copyright © 2011-2022 走看看