java实现快速排序的分割思想:在快速排序算法中,我们随机在数组中选择一个数字,然后把比选中数字小的数字都排在它前面,比选中数字大的数字都排在它的后面。

来源:互联网 发布:nginx服务器绑定域名 编辑:程序博客网 时间:2024/05/22 02:29
package Nowcode;//快速排序的分割思想:在快速排序算法中,我们随机在数组中选择一个数字,然后把比选中数字小的数字都排在它前面,比选中数字大的数字都排在它的后面。public class QuickSort {void quickSort(int[] data, int length, int start, int end) {if (start == end) {return;}// 选择的数经过一次排序后所在的位置下标int index = Partition(data, length, start, end); // 由上述Partition可知以最后一个元素为基准元素// 递归把选择数字左边排序if (index > start) {quickSort(data, length, start, index - 1); // 先排基准元素前面部分}// 递归把选择数字右边排序if (index < end) {quickSort(data, length, index + 1, end); // 后排基准元素后面部分}}// 在数组中选择一个数,比选择的数字小的数字移到数组的左边,比选择数字大的移动到数组的右边int Partition(int[] data, int length, int start, int end) {if (data.length == 0 || length <= 0 || start < 0 || end >= length) {return -1;}// 选择从最后一个数为基准元素开始一次排序int index = start - 1;for (int i = start; i < end; ++i) {if (data[i] < data[end]) // 以最后一个元素为基准点进行划分{++index;if (index != i) {// 交换int temp = data[i];data[i] = data[index];data[index] = temp;}}}++index;// 交换int temp = data[index];data[index] = data[end];data[end] = temp;// System.out.print("index=" + index + " ");return index; // 返回一次排序后开始选择的数此刻所在最终位置索引}public static void main(String[] args) {int[] data = { 48, 15, 24, 59, 64, 79, 97, 40 };int length = data.length;int start = 0;int end = length - 1;System.out.print("排序前:");for (int i = 0; i < data.length; i++) {System.out.print(data[i] + " ");}QuickSort q = new QuickSort();q.quickSort(data, length, start, end);System.out.print("排序后:");for (int i = 0; i < data.length; i++) {System.out.print(data[i] + " ");}}}

阅读全文
0 0
原创粉丝点击