void quicksort(int *attr, int begin, int end)
/* attr[begin]作為基準 */
i = begin + 1;
j = end;
/* 迴圈將比基準大的放後邊 */
while (i < j)
else
}/* 最後乙個未處理的處於大小分界的數與基準值作對比,確定前後位置 */
/* 注意:必須帶=號,例如,會一直進行(2>2)==0的比較陷入死迴圈 */
if (attr[i] >= attr[begin])
swap(&attr[i], &attr[begin]);
quicksort(attr, begin, i);
quicksort(attr, j, end);
}
上面實現了從小到大的排列方法,一次遞迴將比基準值小的放在前面,大的放後面(務必保證 [begin, i] 區間不能存在大於基準值的數)。在通常情況下,通過遞迴呼叫log n的深度即可完成排序。
以下是完整**:
#include void swap(int *left, int * right)
void quicksort(int *attr, int begin, int end)
/* attr[begin]作為基準 */
i = begin + 1;
j = end;
/* 迴圈將比基準大的放後邊 */
while (i < j)
else
}/* 最後乙個未處理的處於大小分界的數與基準值作對比,確定前後位置 */
/* 注意:必須帶=號,例如,會一直進行(2>2)==0的比較陷入死迴圈 */
if (attr[i] >= attr[begin])
swap(&attr[i], &attr[begin]);
quicksort(attr, begin, i);
quicksort(attr, j, end);
}int main(int argc, char *ar**)
; int i = 0;
quicksort(a, 0, 4);
for(; i<5; i++)
printf("\n");
return 0;
}
執行結果:
1 2 4 5 8
快速排序法
一 快速排序演算法的基本特性 時間複雜度 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...
快速排序法
快速排序法思想 在待排序的n個資料中取第乙個數字為基準數,陣列最前面放乙個標桿,陣列最後麵放乙個標桿,通過基準數和標桿 i,j 出的數進行比較,實現每次排序完時候,共三組數,不大於基準數 基準數 不小於基準數 舉例說明 5 i 4,6,8,3,9,2 j 基準數5 標桿 i 指向5位置,標桿 j 指...