高速ソートアルゴリズムの原稿のバージョン

免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/sinat_32336967/article/details/98874420

百倍、参照からその意味を読みます。案の定、すべての審査は異なる収穫を持つことになります。

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;
  }
}

3.サンプル結果

ここに画像を挿入説明

おすすめ

転載: blog.csdn.net/sinat_32336967/article/details/98874420