java实现快速排序
Posted 我有两个皮夹克
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java实现快速排序相关的知识,希望对你有一定的参考价值。
/** * 快速排序 */ public class QuickSort { public static void main(String[] args) { /** * 定义一个无序数列 */ int[] arr = {22,1,9,67,33,31,17}; System.out.println("排序前:"+ Arrays.toString(arr)); /** * 调用快速排序方法 */ quickSort(arr,0,arr.length-1); /** * 输出排序后结果 */ System.out.println("排序后:"+Arrays.toString(arr)); } /** * 快速排序方法 */ static void quickSort(int[] arr,int leftIndex,int rightIndex){ if (leftIndex < rightIndex){ /** * 先挖坑填数调整数组 */ int i = AdjuestArray(arr,leftIndex,rightIndex); /** * 递归调用 */ quickSort(arr,leftIndex,i - 1); quickSort(arr,i + 1,rightIndex); } } /** * 快速排序方法之--挖坑填数 * 待排序数组 arr * 左指针 leftIndex * 右指针 rightIndex */ static int AdjuestArray(int[] a,int leftIndex,int rightIndex){ int i = leftIndex; int j = rightIndex; /** * 假设数组中的左指针位置的数为第一个挖掉的数字 */ int x = a[i]; //左指针小于右指针才有必要进行排序 while (i < j){ /** * 右指针从后往前找比挖掉的数字小或等于的数来填坑 */ while (i < j && a[j] >= x){ //右指针左移 j--; } if (i < j){ //找到了比挖掉的数大的数a[j],就把a[j]挖掉来填第一个被挖掉的数的坑,a[j]就变成了新的坑 a[i] = a[j]; i++; /** * 左指针从左往右移动,找比挖掉的数大或等于的数字 */ while (i < j && a[i] <= x){ //左指针右移 i++; } if (i < j){ //a[i]填入a[j]的坑,a[i]形成新的坑 a[j] = a[i]; j--; } } } //当i = j时,退出循环,将x填回最后的坑 a[i] = x; return i; } }
运行结果:
以上是关于java实现快速排序的主要内容,如果未能解决你的问题,请参考以下文章