免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
百倍、参照からその意味を読みます。案の定、すべての審査は異なる収穫を持つことになります。
1.ソート処理
詳細なプロセスのクイックドレーンを以下に示します。
1,2,3,4サイクルは、低<高サイクルです。低==終了する高い時間。
図1及び図3に示すように、2つのサイクルが条件を満足する数を見つけるために使用されます。
ループ条件の最初のステップは、低<高&&のARR [高]が > = TEMP。出口一時前に投票された数よりも少ない
第二段階のサイクリング条件は、[低]高&& ARR <低い <= TEMP。一時は出口の数よりも大きかった検索。
第三の工程と第四の工程が割り当てです。
第3のステップは、数が[LOW] ARRに割り当てられた一時ARRの[高]よりも小さい見つけることです。
第四のステップは、TEMPがARR [低]の数よりも大きい見つけることであるARRに割り当てられ、[高]。
最後のサイクルの終わりに、温度を[低] ARRに割り当てられます。
このとき、インデックスが返されます。以下のための再帰ARR [低] - > ARR [ POS-1] およびARR [POS + 1] - > ARR [高] 早く放電されます。
2.サンプルコード
package org.jinyuxin.sort.ExchangeSort;
public class QuickSort {
public static void main(String[] args) {
int[] arr = {8,5,6,7,4,2,3,1};
int len = arr.length;
quickSort(arr, 0,len-1);
for(int i:arr) {
System.out.println(i);
}
}
public static void quickSort(int[] arr, int low, int high) {
if(low < high) {
int pos = findPosition(arr, low, high);
//递归对右半边进行快排
quickSort(arr,low,pos-1);
//对左半边进行快排
quickSort(arr,pos+1,high);
}
}
public static int findPosition(int[] arr, int low, int high) {
//枢纽值
int temp = arr[low];
//low等于high的时候退出循环
while(low < high) {
//从后向前,直到找到第一个小于temp的数才退出
while(low< high && arr[high] >= temp){
high--;
}
//找到小于枢纽值的数以后,赋值给arr[low]
arr[low] = arr[high];
//从前向后,直到找到第一个大于temp的数才退出
while(low < high &&arr[low] <= temp) {
low++;
}
//找到大于枢纽值的数以后,赋值给arr[high]
arr[high] = arr[low];
}
//此时将枢纽值赋值给low=high位置
arr[low] = temp;
//返回枢纽的最终位置
return low;
}
}