zoukankan      html  css  js  c++  java
  • leetcode记录1 快速排序

     1 //快排
     2 class Solution {
     3     public List<Integer> sortArray(int[] nums) {
     4         List<Integer> sortArray = new ArrayList<Integer>();
     5         for(int i=0;i<nums.length;i++){
     6             sortArray.add(nums[i]);
     7         }
     8         if(sortArray.size()>1){
     9              quicksort(sortArray,0,sortArray.size()-1);
    10         }
    11 
    12         return sortArray;
    13     }
    14     public void quicksort(List<Integer> nums,int a,int b){
    15         if(a>=b){
    16             return;
    17         }
    18         int p = spilt(nums,a,b);
    19         quicksort(nums,a,p-1);
    20         quicksort(nums,p+1,b);
    21         return;
    22     }
    23     public int spilt(List<Integer> nums,int a,int b){
    24         int i = a-1;
    25         int j=a;
    26         for(j=a;j<b;j++){
    27             if(nums.get(j)<=nums.get(b)){
    28                 i=i+1;
    29                 swap(i,j,nums);
    30             }
    31         }
    32         i=i+1;
    33         swap(i,b,nums);
    34         return i;
    35     }
    36     public void swap(int a,int b,List<Integer> nums){
    37         int c=nums.get(a);
    38         nums.set(a,nums.get(b));
    39         nums.set(b,c);
    40     }
    41 }

    解题思路:

    分治算法,第一步看是否满足条件,此题中是判断数组左下边是否大于等于右下标,是的话则返回。

    第二步进行划分,固定选取数组最后一位为进行划分的元素,采用双指针,当前数组起始位置到第一个指针i值之间[a,i]为已遍历过且小于划分元素的所有数字,第一个指针i+1到第二个指针之间j之间[i+1,j]为已遍历过且大于划分元素的所有数字,第二指针j+1到倒数第二个下标之间[j+1,b-1]为还未遍历的数字。

    第三步对划分出的两部分数组分别进行处理,此处需要注意的地方为

    19         quicksort(nums,a,p-1);
    20         quicksort(nums,p+1,b);
    分别处理的时候,一定要去掉划分标记位置p坐标对应的元素,即划分的两个数组分别为[a,p-1],[p+1,b]。试想如果将p放入左边数组中为[a,p],坐标数组中第一个元素至倒数第二个元素都是小于
    或等于nums[p]的,这样会陷入无限递归循环中。
  • 相关阅读:
    习题2-4 求交错序列前N项和 (15分)
    015_Web WPI
    014_捆绑包与显示模式
    013_模型验证
    012_模型绑定
    011_URL和Ajax辅助器方法
    010_模板辅助器方法
    009_辅助器方法
    008_视图
    007_控制器可扩展性
  • 原文地址:https://www.cnblogs.com/gongzixiaobaibcy/p/11880399.html
Copyright © 2011-2022 走看看