資料結構與演算法之快速排序
時間複雜度平均O(nlogn)
package com.qiangqiang.sort;
import java.util.Random;
public class QuickSort {
public static void main(String[] args) {
Integer[] arr = new Integer[9000000];
for (int i = 0; i < 9000000; i++) {
Random random = new Random();
arr[i] = random.nextInt(99909900);
}
long l1 = System.currentTimeMillis();
sort(arr);
long l2 = System.currentTimeMillis();
long l = l2 - l1;
System.out.println("耗費:" + l + "毫秒");
for (int i : arr) {
System.out.print(i + ",");
}
}
//對陣列內元素進行排序
public static void sort(Comparable[] a) {
int lo = 0;
int hi = a.length - 1;
sort(a, lo, hi);
}
//對陣列a中從索引lo到hi之間的元素進行排序
public static void sort(Comparable[] a, int lo, int hi) {
if (lo >= hi) {
return;
}
//需要對陣列中lo索引到hi索引的元素進行分組,(左子組和右子組)
int partition = partition(a, lo, hi); //返回的是頭元素最為排序基準排序後的索引
//讓左子組有序,讓右子組有序,那麼整個就有序了
sort(a, lo, partition - 1);
sort(a, partition + 1, hi);
}
//對陣列a中,從索引lo到索引hi之間的元素進行分組,並返回分組界限對應的索引
public static int partition(Comparable[] a, int lo, int hi) {
Comparable key = a[lo];
int left = lo;
int right = hi + 1;
while (true) {
//先從右往左掃描,移動right指標
while (comp(key, a[--right])) {
if (right == lo) {
break;
}
}
//從左往右掃描,移動left指標
while (comp(a[++left], key)) {
if (left == hi) {
break;
}
}
if (left >= right) {
break;
} else {
exchange(a, left, right);
}
}
//交換分界值
exchange(a, lo, right);
return right;
}
//交換資料
public static void exchange(Comparable[] a, int i, int j) {
Comparable temp = a[i];
a[i] = a[j];
a[j] = temp;
}
public static Boolean comp(Comparable a, Comparable b) {
return a.compareTo(b) < 0;
}
}
相關文章
- 資料結構與演算法之排序資料結構演算法排序
- python演算法與資料結構-快速排序(36)Python演算法資料結構排序
- 演算法與資料結構之原地堆排序演算法資料結構排序
- 資料結構和演算法面試題系列—排序演算法之快速排序資料結構演算法面試題排序
- 資料結構與演算法——排序資料結構演算法排序
- 07 Javascript資料結構與演算法 之 排序演算法JavaScript資料結構演算法排序
- 演算法與資料結構高階排序演算法之歸併排序演算法資料結構排序
- 資料結構與演算法 排序演算法 快速排序【詳細步驟圖解】資料結構演算法排序圖解
- C#資料結構與演算法5-C# 快速排序C#資料結構演算法排序
- 【資料結構與演算法】堆排序資料結構演算法排序
- 資料結構與演算法——堆排序資料結構演算法排序
- 資料結構與演算法(八):排序資料結構演算法排序
- 資料結構與演算法----# 一、排序資料結構演算法排序
- 資料結構與演算法:堆排序資料結構演算法排序
- [資料結構與演算法] 排序演算法資料結構演算法排序
- 資料結構與演算法——排序演算法-歸併排序資料結構演算法排序
- 資料結構與演算法——排序演算法-基數排序資料結構演算法排序
- 資料結構與演算法——排序演算法-選擇排序資料結構演算法排序
- 資料結構與演算法——排序演算法-氣泡排序資料結構演算法排序
- 資料結構與演算法 排序與搜尋資料結構演算法排序
- 資料結構和演算法(Golang實現)(25)排序演算法-快速排序資料結構演算法Golang排序
- Java 資料結構與演算法系列之氣泡排序Java資料結構演算法排序
- 【資料結構與演算法】歸併排序資料結構演算法排序
- 資料結構與演算法-反轉排序資料結構演算法排序
- 資料結構與演算法 基礎排序資料結構演算法排序
- 資料結構與演算法 進階排序資料結構演算法排序
- Java資料結構與排序演算法 (三)Java資料結構排序演算法
- Java資料結構與排序演算法 (一)Java資料結構排序演算法
- Java資料結構與排序演算法 (二)Java資料結構排序演算法
- 【資料結構與演算法】快速冪資料結構演算法
- 看圖輕鬆理解資料結構與演算法系列(快速排序)資料結構演算法排序
- 資料結構與演算法整理總結---排序 2資料結構演算法排序
- 資料結構與排序資料結構排序
- 《資料結構與演算法》之十大基礎排序演算法資料結構演算法排序
- 私人訂製之資料結構(排序演算法)資料結構排序演算法
- 【Java資料結構與演算法】第八章 快速排序、歸併排序和基數排序Java資料結構演算法排序
- C語言版資料結構及演算法_快速排序C語言資料結構演算法排序
- 資料結構與演算法——十個排序演算法資料結構演算法排序