排序算法实操 - 冒泡排序和快速排序的模板

本文比较冒泡排序、快速排序

一、冒泡排序

  1. 算法
//对数组nums的索引i + 1 ~ nums.length - 1 数组元素进行排序
  for(int m = i + 1; m < nums.length; m++){
    
    
      for(int n = nums.length - 1; n > m; n--){
    
    
          if(nums[n] < nums[n - 1]){
    
    
              tmp = nums[n - 1];
              nums[n - 1] = nums[n];
              nums[n] = tmp;
          }
      }
  }
  1. 说明
    a. 外层m每次会少一个,用来限制内层循环每次的数量
    b. 外层是递增,内层是递减。

二、快速排序

  1. 算法
private void quickSort(int[] nums, int from, int to){
    
    
    //结束条件
    if(from >= to){
    
    
        return;
    }

    //以第一个为中轴点分开为两个数组
    int left = from, right = to;
    int midVal = nums[from];
    int round = 2;//1表示左侧判断,1表示右侧判断
    while(left < right){
    
    
        if(round == 1){
    
    
            if(nums[left] <= midVal){
    
    
                left++;
            }else{
    
    
                nums[right] = nums[left];
                right--;
                round = 2;
            }
        }else if(round == 2){
    
    
            if(nums[right] >= midVal){
    
    
                right--;
            }else{
    
    
                nums[left] = nums[right];
                left++;
                round = 1;
            }
        }
    }
    nums[left] = midVal;

    //递归
    quickSort(nums, from, left - 1);
    quickSort(nums, left + 1, to);
}
  1. 说明
    a. 递归实现快速排序
    b. 参考https://blog.csdn.net/qq_40285839/article/details/83018673

猜你喜欢

转载自blog.csdn.net/hudmhacker/article/details/107709706