Javaのクイックソート
アルゴリズムの導論の中の偽コードに基づいて書いた
最初にネットで探した例はすべて問題があって、なぜか、すべて私を気絶させました
そして偽のコードを押して書いても、間違いがあって、本当に憂鬱です.
そして全部削除して何度も書き直して、いきなり書いてしまいました
主な難点はpartition関数,中のiとjの関係であり,それらの値はいつ交換されるかである.
長い間データ構造を考えていなかったのかもしれません
だから今日はこれを作るのに多くの時間を費やしました
最初にネットで探した例はすべて問題があって、なぜか、すべて私を気絶させました
そして偽のコードを押して書いても、間違いがあって、本当に憂鬱です.
そして全部削除して何度も書き直して、いきなり書いてしまいました
主な難点はpartition関数,中のiとjの関係であり,それらの値はいつ交換されるかである.
長い間データ構造を考えていなかったのかもしれません
だから今日はこれを作るのに多くの時間を費やしました
package cn.qs.util;
public class SortUtil {
/**
*
* :( )
* , ,
* a[p:r]
* 1) ( ): a[p] a[p:q-1]、a[q]、a[q+1:r] a[p:q-1] a[q],a[q+1:r] a[q].
* 2) : , a[p:q-1] a[q+1:r] 。
* @param Array ,
* @param p
* @param r
*/
public void quickSort(int[] Array, int p, int r){
if(p < r){
int q = partition(Array, p, r);
//
quickSort(Array, p, q - 1);
quickSort(Array, q + 1, r);
}
}
public int partition(int[] Array, int p, int r){
int x = Array[r];// ,
int i = p - 1;
for(int j= p; j <= r - 1; j++){
if(Array[j] <= x){
i++;
//
this.swap(i, j, Array);
}
}
// ( )
this.swap(i+1, r, Array);
return i + 1;
}
/**
*
* @param a
* @param b
* @param arraySort
*/
private void swap(int a, int b, int[] arraySort) {
int tmp = arraySort[a];
arraySort[a] = arraySort[b];
arraySort[b] = tmp;
}
/**
* @param args
*/
public static void main(String[] args) {
int[] arrays = {43,36,15,11,9,12,35};
// int[] arrays = { 12,9,15,11,36};
SortUtil su=new SortUtil();
su.quickSort(arrays, 0, arrays.length-1);
for(int i=0;i<arrays.length;i++){
System.out.print(arrays[i]+",");
}
}
}