程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 疾速排序算法道理及java遞歸完成

疾速排序算法道理及java遞歸完成

編輯:關於JAVA

疾速排序算法道理及java遞歸完成。本站提示廣大學習愛好者:(疾速排序算法道理及java遞歸完成)文章只能為提供參考,不一定能成為您想要的結果。以下是疾速排序算法道理及java遞歸完成正文


疾速排序 對冒泡排序的一種改良,若初始記載序列按症結字有序或根本有序,墮落為冒泡排序。應用的是遞歸道理,在一切同數目級O(n longn) 的排序辦法中,其均勻機能最好。就均勻時光而言,是今朝被以為最好的一種外部排序辦法

根本思惟是:經由過程一躺排序將要排序的數據朋分成自力的兩部門,個中一部門的一切數據都比別的一部門的一切數據都要小,然後再按此辦法對這兩部門數據分離停止疾速排序,全部排序進程可以遞歸停止,以此到達全部數據釀成有序序列。

三個指針: 第一個指針稱為pivotkey指針(樞軸),第二個指針和第三個指針分離為left指針和right指針,分離指向最右邊的值和最左邊的值。left指針和right指針從雙方同時向中央切近親近,在切近親近的進程中一直的與樞軸比擬,將比樞軸小的元素移到低端,將比樞軸年夜的元素移到高端,樞軸選定後永久不變,終究在中央,前小後年夜。

須要兩個函數:

① 遞歸函數  public static void quickSort(int[]n ,int left,int right)
② 朋分函數(一趟疾速排序函數) public static int partition(int[]n ,int left,int right)

JAVA源代碼(勝利運轉):


package testSortAlgorithm;

public class QuickSort {
 public static void main(String[] args) {
  int [] array = {49,38,65,97,76,13,27};
  quickSort(array, 0, array.length - 1);
  for (int i = 0; i < array.length; i++) {
   System.out.println(array[i]);
  }
 }
 /*先依照數組為數據原型寫出算法,再寫出擴大性算法。數組{49,38,65,97,76,13,27}
  * */
 public static void quickSort(int[]n ,int left,int right){
  int pivot;
  if (left < right) {
   //pivot作為樞軸,較之小的元素在左,較之年夜的元素在右
   pivot = partition(n, left, right);
   //對閣下數組遞歸挪用疾速排序,直到次序完整准確
   quickSort(n, left, pivot - 1);
   quickSort(n, pivot + 1, right);
  }
 }

 public static int partition(int[]n ,int left,int right){
  int pivotkey = n[left];
  //樞軸選定後永久不變,終究在中央,前小後年夜
  while (left < right) {
   while (left < right && n[right] >= pivotkey) --right;
   //將比樞軸小的元素移到低端,此時right位相當於空,期待低位比pivotkey年夜的數補上
   n[left] = n[right];
   while (left < right && n[left] <= pivotkey) ++left;
   //將比樞軸年夜的元素移到高端,此時left位相當於空,期待高位比pivotkey小的數補上
   n[right] = n[left];
  }
  //當left == right,完成一趟疾速排序,此時left位相當於空,期待pivotkey補上
  n[left] = pivotkey;
  return left;
 }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved