• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

风子sama

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

排序算法之快速排序

快速排序

快速排序是排序算法中经常会见到的算法,相较于冒泡排序,快速排序时间复杂度上要低。

快速排序的平均复杂度为O(nlog2n),最差复杂度为O(N2),空间复杂度为O(1)。

快速复杂的思想在于选取数组的一个值最为中间值,分别从右遍历找到小于中间值的元素放到左边,从左遍历找到大于中间值的元素放到右边,以此得到一个初步满足要求的数组,再把左右个元素再次进行大小移动,通过递归的方式一次次排序 ,直到数组顺序正确,同时跳出递归或者循环的条件始终是左指针小于右指针。

废话不多说,上代码:

public QuickSort{
    public static void main(String[] args) {
        int[] nums ={5,4,3,2,1};
        int left = 0;
        int right = nums.length-1;
        quicksort(nums, left, right);
        System.out.println(Arrays.toString(nums));
    }
    public static void quicksort(int[] nums, int left, int right){
        if(left<right) {
            int middle = sort(nums, left, right);
            quicksort(nums, left, middle - 1);
            quicksort(nums, middle + 1, right);
        }
    }
    static int sort(int[] nums,int left,int right){
        int temp = nums[left];
        while(left<right){
            while(left<right && nums[right] > temp){
                right--;
            }
            nums[left] = nums[right];
            while(left<right && nums[left] < temp){
                left++;
            }
            nums[right] = nums[left];
        }
        nums[left] = temp;
        return left;
    }
}

posted on 2021-09-29 10:37  风子sama  阅读(196)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3