java代码实现快速排序

快速排序实现

package demo4;

import java.util.Arrays;

/**
 * 快速排序
 * 选择一个基数作为比较的标准,比它大的都在右边,比它小的都在左边
 */
public class QuickSort {

    public static void main(String[] args) {
        int[] arr = new int[]{3,2,5,7,1,4,9,8,6};
        quickSort(arr,0,arr.length-1);
        System.out.println(Arrays.toString(arr));
    }

    /**
     * 3,2,5,7,1,4,9,8,6
     * 以3为基数
     * 一开始比较用low标记3的下标,high标记6的下标。 3和6 ,3比6小,不替换,high下标移动指向8的下标,然后比较3和8,
     * 一直这样比较下去直到,直到3和1比较,此时3大于1,high指向的是1,然后high停住不动,替换,把1的值暂时覆盖3的值,然后第一的值是1,high的值也为1,把值3赋值在一个临时变量中
     * (注意是替换不是交换,3不会消失,因为它赋值给了st)
     *  3,   2,   5,   7,   1,   4,   9,   8,  6
     * low                 high
     *然后Low开始移动,arr[low]与临时变量3开始比较,直到有比3大的值停下
     *  1,   2,   5,   7,   1,   4,   9,   8,  6
     *           low      high
     * 此时low的位置是5,5比3大。则把5替换掉high位置的1,此时low不动,让high移动
     *  1,   2,   5,   7,   5,   4,   9,   8,  6
     *            low      high
     * 直到low=high,然后把这个位置数(5)替换成基数(3)第一次循环结束 ,此时左边都比基数(3)小,右边都比基数(3)大
     * 1,   2,   3,   7,   5,   4,   9,   8,  6
     *           low
     *           high
     * 通过3分割为两部分
     * 1,   2,   3
     * 7,   5,   4,   9,   8,  6
     * 然后按照上面的比较方式在进行比较,直到只剩下一个数无法再分割,表示排序结束,实现方式采用递归
     * @param arr
     * @param start
     * @param end
     */
    public static void quickSort(int[] arr,int start,int end){
        if(start<end){//递归结束条件
            //把数组中的第0个数字作为基数
            int st=arr[start];
            //记录需要排序的下标,最开始是第一个和最后一个
            int low = start;
            int high = end;
            //循环找出比标准数大的数和小的数
            while (low<high){//循环结束的条件,不能用low<=high,不然会多执行一次
                //如果基数小于等于要比较的数(右边的数),则不替换,但是high的下标要向下移一位,直到不满足条件执行下面的替换
                while (low<high&&st<=arr[high]){
                    high--;
                }
                //替换位置,此时high下标停住不动
                arr[low]=arr[high];
                //如果左边的数字比标准数小,则low下标向前移动,直到不满足条件执行下面的替换
                while (low<high&&arr[low]<=st){
                    low++;
                }
                //替换位置,此时low下标停住不动。等待下一次循环,直到high等于low循环结束
                arr[high]=arr[low];
            }
            //把基数赋值给位置重合的位置的数
            arr[low]=st;//arr[high]=st也一样。
            //处理左边小的数,直到不能分割,递归结束
            quickSort(arr,start,low);
            //处理右边大的数,直到不能分割,递归结束
            quickSort(arr,high+1,end);
        }
    }
}
### 回答1: Java代码实现快速排序的具体实现步骤如下: 1、选取数组的第一个元素作为基准,称为 “基准”。 2、将所有小于“基准”的元素移到“基准”的左边,所有大于“基准”的元素移到“基准”的右边。 3、对“基准”左边和右边的两个子数组分别重复第一、第二步,直到所有子数组只剩下一个元素为止。 ### 回答2: 快速排序是一种常用的排序算法,它是基于分治法的思想。 具体实现Java代码如下: ```java public class QuickSort { public static void quickSort(int[] arr, int low, int high) { if (low < high) { int pivot = partition(arr, low, high); quickSort(arr, low, pivot - 1); quickSort(arr, pivot + 1, high); } } public static int partition(int[] arr, int low, int high) { int pivot = arr[high]; int i = low - 1; for (int j = low; j < high; j++) { if (arr[j] < pivot) { i++; int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } int temp = arr[i + 1]; arr[i + 1] = arr[high]; arr[high] = temp; return i + 1; } public static void main(String[] args) { int[] arr = {9, 2, 5, 1, 4, 7, 6, 8, 3}; quickSort(arr, 0, arr.length - 1); System.out.println("排序后的数组:"); for (int num : arr) { System.out.print(num + " "); } } } ``` 在上述代码中,函数`quickSort()`用于排序整个数组,使用`partition()`函数确定一个基准元素,并将小于基准的元素放在它的左边,大于基准的元素放在它的右边。递归调用`quickSort()`函数对基准元素左右两边的子数组进行排序。最终得到排序后的数组。 在`main()`函数中,测试了一个包含9个元素的整型数组的快速排序实现,并打印出排序后的数组。 快速排序的时间复杂度为O(nlogn),且是原地排序算法,不需要额外的空间。 ### 回答3: 快速排序是一种常用的排序算法,它的基本思想是选取一个元素作为基准,然后将比基准小的元素放到基准的左边,比基准大的元素放到基准的右边,再对左右两个部分分别进行快速排序。这样整个序列就被拆分成了若干个子序列,直到每个子序列只剩下一个元素为止,最终所有子序列都有序了。 下面是用Java实现快速排序代码: ```java public class QuickSort { public static void quickSort(int[] arr, int low, int high) { if (low < high) { int pivot = partition(arr, low, high); quickSort(arr, low, pivot - 1); quickSort(arr, pivot + 1, high); } } private static int partition(int[] arr, int low, int high) { int pivot = arr[low]; while (low < high) { while (low < high && arr[high] >= pivot) { high--; } arr[low] = arr[high]; while (low < high && arr[low] <= pivot) { low++; } arr[high] = arr[low]; } arr[low] = pivot; return low; } public static void main(String[] args) { int[] arr = {5, 2, 8, 3, 9, 1}; quickSort(arr, 0, arr.length - 1); for (int num : arr) { System.out.print(num + " "); } } } ``` 以上是一个简单的快速排序实现。通过递归调用quickSort函数和partition函数,将数组不断拆分为子序列,并在每次选取基准时进行交换使得左边的元素都小于基准,右边的元素都大于基准。最后整个数组就有序了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值