クイック ソートは、バイナリの考え方に基づいてバブル ソートを改良したものです。主なアイデアは、基数を設定し、基数より小さい数値を基底の左側に配置し、基数より大きい数値を基底の右側に配置し、数値の 2 つの部分をさらに並べ替えて、次の結果を達成することです。配列のソート。
その利点は効率が高く、平均時間計算量が O(nlogn) であることです。名前が示すように、クイック ソートは最速の並べ替えアルゴリズムであり、最良の場合、スペース計算量は O(logn) です。配列の場合、コードは比較的単純です。
欠点は、初期シーケンスが順序付けされている場合、または基本的に順序付けされている場合、時間計算量が O(n^2) に低下することです。
例えば:
publicclassMain{//クイック行実装メソッド publicstaticvoidquickRow(int[]array,intlow,inthigh){inti,j,pivot;//終了条件 if(low>=high){return;}i=low;j=high;/ /選択したノード、ここで選択した配列の最初の番号がノードとして使用されます pivot=array[low];while(i<j){//最後にノードより小さい番号を探します。ループの最後で、それが見つかるか、i =jwhile(array[j]>=pivot&&i<j){j--;}//ループの最後でノードより大きい数を探します。見つかるか、i=jwhile(array[i]<=pivot&&i <j){i++;}//i!=j 命令が見つかった場合、2 つの数値を交換します if(i<j){inttemp=array [i];array[i]=array[j];array [j]=temp;}}//i==j サイクルが終了し、交換ノード数とミーティングポイント数 array[low]=array [i];array[i]=pivot;//配列を「分割」「2 等分」し、上記の操作を繰り返しますquickRow(array,low,i-1);quickRow(array,i+1,high);} publicstaticvoidmain(String[]args){int[]array={6,17, 38,59,2,10};intlow=0,high=array.length-1;quickRow(array,low,high);for( inti:array){System.out.println(i);}}}
実行結果は次のとおりです。
2610173859