Javaのクイックソートアルゴリズム最も簡単な説明!

基本的には思ったのクイックソート:

  • 基準値キーとして配列の最初の要素を選択します。
  • 高い順方向順次の配列の最後の要素は、それの右側にフルキーの数よりも少なくなりませんパーティションからキーと比較して、全体のキーの数が左側にそれを置くよりも大きくありません。
  • 各セクションは、ほんの数になるまでの周りに再度参照範囲における鍵交換要素を比較した後にステップを繰り返します

アルゴリズムの特定の実装:
ここに画像を挿入説明
基本的な考え方を説明しているが、数字キーや高の最後の要素でマークされています


ここに画像を挿入説明
思想をする必要があるので、最後の要素と比較してスタートキー、すなわち、34 4と比較して、であり、その全体の右側にキー数よりも小さくない場合に比べ、それほど34から4は比較的小さくあり続けるなどと33ます三時に、3キー交換で、キーインデックスが再び戻ってから比較する最後の要素から変わらず0で、これまで右キーは、その数字よりもすべて大きいです。図からマークを作った、全く何の交換は、はいスワップを示していないことを意味しません。


次の主要な要素のためのアイデアによると、上記の手順を繰り返します。
ここに画像を挿入説明
のみ4と交換することができ、次のように交換の結果は次のとおりです。
ここに画像を挿入説明


図2は、右のインデックス番号2よりも大きいのでない交換が発生しない、インデックスキーです。
ここに画像を挿入説明
何の交換、1キーのインデックスがありませんので、


ここに画像を挿入説明
交換の後、キーインデックスは横ばいと最後のインデックスと比較され続け、というように。
ここに画像を挿入説明
ここに画像を挿入説明
為替の最終結果:
ここに画像を挿入説明
:同じ原理、それが詳述されていない、とアレイの例は、オーバーソートので、直接、最終結果がソートされます表示されているため、主要指数は、比較を行う、1への継続的な
ここに画像を挿入説明
コードを以下を達成するために:

//low是定义一个变量作为key
//high为数组最后一个元素
 public static void sort(int[] arr,int low,int high){
      int i,j,key,t;
       if(low>high){
           return;
       }
       i=low;
       j=high;
       //key就是基准位
       key = arr[low];

       while (i<j) {
           //先看右边,依次往左递减
           while (key<=arr[j]&&i<j) {
               j--;
           }
           //再看左边,依次往右递增
           while (key>=arr[i]&&i<j) {
               i++;
           }
           //如果满足条件则交换
           if (i<j) {
               t = arr[j];
               arr[j] = arr[i];
               arr[i] = t;
           }

       }
       //最后将基准为与i和j相等位置的数字交换
       arr[low] = arr[i];
       arr[i] = key;
       //递归调用左半数组
       sort(arr, low, j-1);
       //递归调用右半数组
       sort(arr, j+1, high);
   }
   public static void main(String[] args) {
       // TODO Auto-generated method stub
      int[] arr =new int[]{4,12,3,52,15,33,34};
       sort(arr,0,6);
        for (int i = 0; i < arr.length; i++) {
           System.out.println(arr[i]);
       }
  }

結果は以下の通りであります:
ここに画像を挿入説明

おすすめ

転載: blog.csdn.net/fight252/article/details/90814870