快速排序法

Posted 樱花树下叹息桥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序法相关的知识,希望对你有一定的参考价值。

当前浏览器不支持播放音乐或语音,请在微信或其他浏览器中播放 快速排序法

        基本思想:取数组的第一个位置作为基准值,小于基准值的放数组左边,大于基准值的放数组右边,递归数组两边的排序.

        代码实现:

第一代版本:

快速排序法

快速排序法

        运行结果:

快速排序法

        缺点:该版本只能对存储不重复数的数组进行排序,若数组含有重复数,改程序将死循环.

        源码:

import java.util.Arrays;


public class QuickSort {


public static void quickSort(int[] arr,int low,int high) {

int i = low;

int j = high;

if(low >= high) {

return;

}

int key = i;

while(low < high) {

while(low < high && arr[high] > arr[key]) {

high--;

}


while(low < high && arr[low] < arr[key]) {

low++;

}


if(low < high) {

int temp = arr[high];

arr[high] = arr[low];

arr[low] = temp;

}

}


if(low < high) {

int temp = arr[key];

arr[key] = arr[low];

arr[low] = temp;

}

quickSort(arr, key+1, j);

quickSort(arr, i, key-1);

}

public static void main(String[] args) {

int arr[] = {1,3,2,5,66,33,22,0,55,8};

QuickSort.quickSort(arr, 0, arr.length-1);

System.out.println(Arrays.toString(arr));

}


}


第二代版本:

        代码实现:

快速排序法

        运行结果:

        该程序好处是不会漏掉任何一个数,坏处是交换次数较多,效率较低


        源码:

import java.util.Arrays;


public class QuickSort2 {


public static void sort(int[] arr,int low,int high) {

if(low > high) {

return;

}

int i = low;

int j = high;

int value = arr[i];

boolean flag = true;

while(i != j) {

if(flag) {

if(value > arr[j]) {

swap(arr,i,j);

flag = false;

}else {

j--;

}

}else {

if(value < arr[i]) {

swap(arr,i,j);

flag = true;

}else {

i++;

}

}

}

sort(arr,low,i-1);

sort(arr,i+1,high);

}

private static void swap(int[] arr, int i, int j) {

int temp = arr[i];

arr[i] = arr[j];

arr[j] = temp;

}

public static void main(String[] args) {

int arr[] = {1,3,2,5,66,33,22,0,55,8,8};

QuickSort2.sort(arr, 0, arr.length-1);

System.out.println(Arrays.toString(arr));

}

}


以上是关于快速排序法的主要内容,如果未能解决你的问题,请参考以下文章

数组的排序,冒泡法,快速排序法

[ 数据结构 -- 手撕排序算法第五篇 ] 快速排序 <包含hoare法,挖坑法,前后指针法> 及其算法优化

php排序介绍_冒泡排序_选择排序法_插入排序法_快速排序法

C语言之快速排序法

快速排序法QuickSort

js冒泡排序法——选择排序(other)——计数排序(桶排序)——快速排序——插入排序-更新