(十六)高级排序—快速排序

本文详细介绍了一种高效的排序算法——快速排序。快速排序采用分治法的思想,通过选取基准元素并进行分区操作,实现对数组的有效排序。文章提供了完整的Java代码实现,并通过实例展示了排序过程。

一、快速排序描述:

快速排序的基本思想是:将最右端的元素作为枢纽,然后将所有元素划分为两组,然后将最右端的枢纽元素与枢纽位置上的元素替换(枢纽位置即为prititioin方法返回的位置,这样做的目的是使枢纽元素以后不需要再排序);接下来,再将这两个组最右端的元素分别作为两组的枢纽继续划分,依次类推下去,直到只剩下最后一个元素。快速排序的起始图如下所示:

快速排序

二、快速排序Java语言描述:

package com.solid.sort;

public class QuickSort {

//定义数组

private int[] arr;

private static int nElems;

/**

* 构造方法

* @param maxSize

*/

public QuickSort(int maxSize) {

arr = new int[maxSize];

nElems = 0;

}

/**

* 插入元素到数组

* @param key

*/

public void insert(int key) {

arr[nElems++] = key;

}

/**

* 遍历数组元素

*/

public void display() {

for(int i=0; i<nElems; i++) {

System.out.print(arr[i] + " ");

}

System.out.println();

}

/**

* 调用快速排序方法

*/

public void sort() {

quickSort(0, nElems-1);

}

/**

* 快速排序

* @param left

* @param right

*/

public void quickSort(int left, int right) {

if(left >= right) {

return;

} else {

int pivot = arr[right];

int prititionIt = pritition(left, right, pivot);

quickSort(left, prititionIt-1);

quickSort(prititionIt+1, right);

}

}

/**

* 划分算法

* @return

*/

private int pritition(int left, int right, int pivot) {

int leftPtr = left - 1;

int rightPtr = right;

while(true) {

while(arr[++leftPtr] < pivot)

;

while(rightPtr > 0 && arr[--rightPtr] > pivot)

;

if(leftPtr >= rightPtr) {

break;

} else {

int temp = arr[leftPtr];

arr[leftPtr] = arr[rightPtr];

arr[rightPtr] = temp;

}

}

int temp = arr[leftPtr];

arr[leftPtr] = arr[right];

arr[right] = temp;

return leftPtr;

}

/**

* 测试main方法

* @param args

*/

public static void main(String[] args) {

QuickSort quickSort = new QuickSort(100);

for(int i=0; i<100; i++) {

int temp = (int)(Math.random()*100);

quickSort.insert(temp);

}

quickSort.display();

quickSort.sort();

quickSort.display();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值