資料結構與演算法 快速排序

2022-03-26 17:15:24 字數 2575 閱讀 6756

程式:

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.從兩邊的數值跟基準值作對比,數值小的放...