程式:
package com.nicchagil.generics.study.no099快速排序;
public class quicksort
print(array, left, right);
int standardindex = left;
int standard = array[standardindex]; // 起始下標值為標準值
system.out.println("選取標準值下標:" + standardindex + ",值為:" + standard);
int i = left;
int j = right;
while (i < j)
/* i從左向右遍歷,直到找到比標準值大的值,或者遇到j,就停止 */
while (array[i] <= standard && i < j)
/** 在此斷點,有如下情況:
* 1、j座標從右向左找,找到了小於標準值的數;i座標從左向右找,找到了大於標準值的數
* 2、j座標從右向左找,找到了小於標準值的數;i座標從左向右找,但沒找到大於標準值的數,遍歷直到與j座標相等
* 3、j座標從右向左找,未能找到小於標準值的數,遍歷直到與i座標相等
*/system.out.println("一輪遍歷後的下標:[" + i + "]、[" + j + "],他們的值為:" + array[i] + "、" + array[j]);
/* i找到了比標準值大的下標、j找到了比標準值小的下標,但它們還沒有相遇,就交換它們的值 */
if (i < j)
print(array, left, right);
}if (standardindex != i)
print(array, left, right);
if (left < i - 1)
if (i + 1 < right)
}/**
* 交換陣列指定倆下標的值
* @param array 陣列
* @param i 下標
* @param j 下標
*/private static void swap(int array, int i, int j)
public static void main(string args) ;
// int array = ;
print(array, 0, array.length - 1);
sort(array, 0, array.length - 1);
print(array, 0, array.length - 1);
}/**
* 列印執行下標範圍的陣列的值
* @param array 陣列
* @param i 下標
* @param j 下標
*/public static void print(int array, int left, int right)
system.out.println();}}
日誌:
565 841 496 225 321 586
565 841 496 225 321 586
選取標準值下標:0,值為:565
一輪遍歷後的下標:[1]、[4],他們的值為:841、321
交換這兩個下標的值:[1]、[4], 他們的值為: 841、321
565 321 496 225 841 586
一輪遍歷後的下標:[3]、[3],他們的值為:225、225
565 321 496 225 841 586
將標準值下標放到i下標,標準值下標和i下標分別為:[0], [3],它們的值為:565, 225
交換這兩個下標的值:[0]、[3], 他們的值為: 565、225
225 321 496 565 841 586
遞迴呼叫:[0], [2]
225 321 496
選取標準值下標:0,值為:225
一輪遍歷後的下標:[0]、[0],他們的值為:225、225
225 321 496
225 321 496
遞迴呼叫:[1], [2]
321 496
選取標準值下標:1,值為:321
一輪遍歷後的下標:[1]、[1],他們的值為:321、321
321 496
321 496
遞迴呼叫:[4], [5]
841 586
選取標準值下標:4,值為:841
一輪遍歷後的下標:[5]、[5],他們的值為:586、586
841 586
將標準值下標放到i下標,標準值下標和i下標分別為:[4], [5],它們的值為:841, 586
交換這兩個下標的值:[4]、[5], 他們的值為: 841、586
586 841
225 321 496 565 586 841
資料結構與演算法 排序演算法 快速排序
源 cpp view plain copy include void quicksort int int,int intfindposs int int,int intmain quicksort arry,0,6 printf after sorted n for i 0 i 7 i printf...
資料結構與演算法 快速排序
基礎概念 快速排序,聽這個名字就能想到它排序速度比較快方法,是一種分治思想。所謂分治,就是指以乙個數為基準,將序列中的其他數往它兩邊 扔 以從小到大排序為例,比它小的都 扔 到它的左邊,比它大的都 扔 到它的右邊,然後左右兩邊再分別重複這個操作,不停地分,直至分到每乙個分割槽的基準數的左邊或者右邊都...
資料結構與演算法 快速排序
快速排序在實際應用中使用廣泛,效果也高。快排使用的是分治策略,一組序列基於某乙個基準值分成兩個大小的子串行,遞迴排序子串行,最終得到有序的序列。快排的平均時間複雜度為o nlogn 演算法的實現步驟 1.在序列中挑選乙個基準值,我們可以預設第乙個數為基準值 2.從兩邊的數值跟基準值作對比,數值小的放...