快速排序法思想:
在待排序的n個資料中取第乙個數字為基準數,陣列最前面放乙個標桿,陣列最後麵放乙個標桿,通過基準數和標桿 i,j 出的數進行比較,實現每次排序完時候,共三組數,
[不大於基準數] 基準數 [不小於基準數]。
舉例說明:
5【i】,4,6,8,3,9,2【j】------基準數5
標桿 i 指向5位置,標桿 j 指向2位置,基準數取6,採用從尾部開始比較(因為標桿在頭部位置,當然你也可以標桿取尾,採用開始首部比較)
第一輪開始--strart
比較 j: 2 < 5,將2放在標桿5位置
①2【i】,4,6,8,3,9,2【j】------第一輪結果
第二輪開始--strart
比較 i:2 < 5; i++; 4 < 5; i++, 6 > 5,將6放在標桿 j 位置
②2,4,6【i】,8,3,9,6【j】------第二輪結果
第三輪開始--strart
比較 j:6 > 5; j++; 9 > 5; j++; 3 < 5,將3放在標桿 i 位置
③2,4,3【i】,8,3【j】,9,6------第三輪
第四輪開始--strart
比較 i:3 < 5; i++; 8 > 5; 將8放在標桿 j 的位置
④2,4,3,8【i】,8【j】,9,6------第四輪結果
比較 j:8 > 5; j--; i == j; 重合,條件終止。 比較 i, i == j, 條件終止,將基準數賦給標桿 i 位置
所以最後順序為:
[2,4,3] [5] [8,9,6] (共三組數)
然後遞迴 分別對左[2,4,3]右[8,9,6]依次比較,得到結果
**實現:
#includevoid qusort(int s, int start, int end);
int main();
int i;
qusort(s,0,6);
for(i=0; i < 7; i++)
return 0;
}void qusort(int s, int start, int end)
if(i < j)
while(i < j && flag > s[i])
if(i < j)
}s[i] = flag; //將基準數放入指定最後位置
//基準數的區間分別遞迴呼叫
qusort(s, start, i-1); //左區間
qusort(s, i+1, end); //右區間
}}
快速排序法
一 快速排序演算法的基本特性 時間複雜度 o n lgn 最壞 o n 2 空間複雜度 o n lgn 不穩定。快速排序是一種排序演算法,對包含n個數的輸入陣列,平均時間為o nlgn 最壞情況是o n 2 通常是用於排序的最佳選擇。因為,基於比較的排序,最快也只能達到o nlgn c void q...
快速排序法
include stdafx.h include vos.h define table mid machine name midmachine define table midmach colname id id define table midmach colname ip ip define t...
快速排序法
package com.sort 快排類 思路 分割和遞迴 分割 將比基準數 第乙個 小的放左邊,大的放右邊 遞迴 快排方法下呼叫分割,再快排。不斷遞迴 author maggie public class quicksort 第一種分割方法 分割 將比基準數 第乙個 小的放左邊,大的放右邊 par...