快速排序分析

本文介绍了快速排序算法的基本思想和步骤,这是一种由C.R.A.Hoare在1962年提出的分治策略。文章通过Java代码展示了快速排序的过程,包括选择基准数、分区操作以及递归排序左右子序列。这种方法是冒泡排序的优化,能够有效地提高排序效率。
摘要由CSDN通过智能技术生成

快速排序的基本思路

快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。
快速排序是冒泡排序的改进.

该方法的基本思想是:

1.先从数列中取出一个数作为基准数。这里我选取第一个数为基数
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。

Java代码实现

package tyut.mcf;

import java.util.Arrays;

/**
 * @author machenfei
 * @date ${DATA} -9:49
 */
public class quickSort {
    public static void main(String[] args) {
        int[] arr = {5, 9, 1, 9, 5, 3, 7, 6, 1};
        quickSort(arr,0,8);
        System.out.println(Arrays.toString(arr));
    }

    public static void quickSort(int[] nums, int begin, int end) {
        //判断是否要排序
      if (begin<end) {
          int left = begin;//左指针
          int right = end;//右指针
          int key = nums[begin];//以数组第一个数作为基准
          while (left < right) {
              //此时左指针指向的内存可以看成是一个空内存,
              // 需要右指针从前往后找到一个比基准小的数字填入左指针指向的内存
              while (left < right && nums[right] > key) {
                  right--;
              }
              if (left < right) {
                  nums[left] = nums[right];
                  left++;
              }
              //此时右指针指向的数字已经转移到左指针指向的内存,
              // 所以交换后,右指针指向的内存相当于空
              while (left < right && nums[left] < key) {
                  left++;
              }
              if (left < right) {
                  nums[right] = nums[left];
                  right--;
              }
          }

          nums[left] = key;

          //递归左序列和右序列
          quickSort(nums, begin, left - 1);
          quickSort(nums, left + 1, end);

      }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值