快速排序
来源:互联网 发布:索尼电视型号推荐知乎 编辑:程序博客网 时间:2024/05/17 06:50
package com.ykp.test;/** * 快速排序:快速排序采用的思想是分治思想。 * * 快速排序是找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 * 都不小于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速排序,将其他n-1个元素也调整到排序后的正确位置。最后每个元素都是在排序后的正 * 确位置,排序完成。所以快速排序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的最终位置以便分治递归。 */public class QuickSortTest { public static void quicksort(int[] arr, int left, int right) { if (left < right) { int low = left;// 低指针 int high = right;// 高指针 int key = arr[low];// 基准的值 // 如果低指针的值不小于高指针的值的时候,结束本次排序 while (low < high) { // 首先扫描高指针,从右向左扫描,在low < high的前提下, // 如果遇到比基准key小的值,则停止扫描,并且把这个小的值放到low所在的位置 while (low < high && arr[high] >= key) { high--; } // 把右边比基准小的放到左边 arr[low] = arr[high]; // 然后扫描低指针,从左向右扫描,在low < high的前提下, // 如果遇到比基准key大的值,则停止扫描,并且把这个大的值放到high所在的位置 while (low < high && arr[low] <= key) { low++; } // 把左边比基准大的放到右边 arr[high] = arr[low]; } // 把基准的值放到中间的位置 arr[low] = key; // 对左侧进行再次排序 quicksort(arr, left, low - 1); // 对右侧再次进行排序 quicksort(arr, low + 1, right); } } public static void main(String[] args) { int arr[] = { 22, 56, 54, 1, 98, 9, 22, 26 }; quicksort(arr, 0, arr.length - 1); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); } }}
0 0
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- (九) CXF 支持的数据类型
- 使用 arc4random获取随机数
- IOS 开放中常用到的第三方类和框架
- 将GridView内嵌在ScrollView中
- welcome to mykernel
- 快速排序
- java.lang.VerifyError: Bad <init> method call from inside of a branch
- 热敏电阻PTC和NTC的区别
- 关于TLB
- MyEclipse去除网上复制下来的代码带有的行号
- IntentService简介
- 泛型算法08
- leetcode 120. Triangle
- awk 用法(使用入门)