您的位置:首页 > 编程语言 > Java开发

八大排序算法之快速排序算法(JAVA)

2018-02-27 00:38 169 查看
快速排序(quickSort)基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。**:对于基准元素的选取,也可以采用随机数选取的方式**:如果要按照元素在位置上的中间来选取基准元素,还可以将中间位置上的元素与第一个元素进行对换

步骤:将两个指针i,j分别指向表的起始和最后的位置。

反复操作以下两步:(1)j逐渐减小,并逐次比较j指向的元素和目标元素的大小,若p(j)<T则交换位置。(2)i逐渐增大,并逐次比较i指向的元素和目标元素的大小,若p(i)>T则交换位置。直到i,j指向同一个值,循环结束
代码:

package com.sunMac.eightSort;
public class quickSort { public static void main(String[] args) { int []array=new int[]{66,13,51,76,81,26,57,69,23}; sortarray(array); } //外部接口方法 public static void sortarray(int[]array){

int startI=0; int endJ=array.length-1; sortCore(array, startI, endJ); } //快速排序方法(递归) private static void sortCore(int[] array, int startIndex, int endIndex) { if (startIndex >= endIndex) { return; } int boundary = boundary(array, startIndex, endIndex); sortCore(array, startIndex, boundary - 1); //递归排序基准元素左侧 sortCore(array, boundary + 1, endIndex); //递归排序基准元素右侧 } //一趟排序的方法 private static int boundary(int[] array, int startIndex, int endIndex) { int standard = array[startIndex]; // 定义排序基准 int leftIndex = startIndex; // 左指针 int rightIndex = endIndex; // 右指针 while(leftIndex < rightIndex) { while(leftIndex < rightIndex && array[rightIndex] >= standard) { rightIndex--; } //从后往前找小于基准值得元素 array[leftIndex] = array[rightIndex]; //交换 while(leftIndex < rightIndex && array[leftIndex] <= standard) { leftIndex++; } //从前往后找大于基准值的元素 array[rightIndex] = array[leftIndex]; //交换 } array[leftIndex] = standard; //改变起始指针指向当前基准元素所处位置// for(int i=0;i<array.length;i++)// System.out.print("--->"+array[i]);// System.out.println(); return leftIndex; //返回基准元素的当前位置 }}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息