自實現部分可參看慕課網陳越老師資料結構課程。
庫函式函式原型:
void qsort(void *buf, size_t num, size_t size, int ( * compare)( const void *, const void *));
函式說明:
對buf指向對資料(包含num項,每項的大小為size)進行快速排序。
void *buf:無型別指標,如果要排序乙個陣列,則為指向陣列第乙個資料的指標;
size_t num:要排序的資料的項數,可理解為待排陣列的元素個數;
size_t size:待排資料每項的大小,以位元組byte為單位;
int ( * compare)( const void *, const void *):
「函式指標」,使用者自定義函式,函式名為compare,const void *:無型別常量指標,可以指向任意型別的資料,但是必須為常量。
compare函式規定待排陣列的排序規則 :
a. 如果函式compare的第乙個引數排在第二個前面,返回負值;
b. 如果函式compare的第乙個引數和第二個位置不要求,返回零值;
c. 如果函式compare的第乙個引數排在第二個後面,返回正值;
∗ ∗簡
單整數排
序∗
∗\color
∗∗簡單整數
排序∗∗
/*---------------簡單整數排序--------------------*/
intcompare
(const
void
*a,const
void
*b)/* 呼叫介面 */
qsort
(a, n,
sizeof
(int
), compare)
;/*---------------簡單整數排序--------------------*/
∗ ∗結
構體陣列
node
中的某鍵
值key
排序∗∗
\color
∗∗結構體數
組nod
e中的某
鍵值ke
y排序∗
∗
/*--------------- 一般情況下,對結構體node中的某鍵值key排序 ---------------*/
struct node a[maxn]
;int
compare2keys
(const
void
*a,const
void
*b)return k;
}/* 呼叫介面 */
qsort
(a, n,
sizeof
(struct node)
, compare2keys)
;/*--------------- 一般情況下,對結構體node中的某鍵值key排序 ---------------*/
/* 快速排序 */
elementtype median3
( elementtype a,
int left,
int right )
void
qsort
( elementtype a,
int left,
int right )
swap
(&a[low]
,&a[right-1]
);/* 將基準換到正確的位置 */
qsort
( a, left, low-1)
;/* 遞迴解決左邊 */
qsort
( a, low+
1, right )
;/* 遞迴解決右邊 */
}else
insertionsort
( a+left, right-left+1)
;/* 元素太少,用簡單排序 */
}void
quicksort
( elementtype a,
int n )
快速排序演算法 C語言實現
快速排序演算法 c語言實現 注 本篇內容為翻譯,之所以選擇這篇進行翻譯原因是該文章含有動畫,能夠更加直觀地展示快速排序。同時,可以仔細看一下 中把結構化的思想給予了更加充分地表現。按照功能進行模組劃分的思想得到了徹底地貫徹。以下內容翻譯自 譯文 在快速排序演算法中,使用了分治策略。首先把序列分成兩個...
快速排序演算法 C語言實現
注 本篇內容為翻譯,之所以選擇這篇進行翻譯原因是該文章含有動畫,能夠更加直觀地展示快速排序。同時,可以仔細看一下 中把結構化的思想給予了更加充分地表現。按照功能進行模組劃分的思想得到了徹底地貫徹。以下內容翻譯自 譯文 在快速排序演算法中,使用了分治策略。首先把序列分成兩個子串行,遞迴地對子序列進行排...
c語言實現快速排序演算法
設要排序的陣列是a 0 a n 1 首先任意選取乙個資料 通常選用第乙個資料 作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。值得注意的是,快速排序不是一種穩定的排序演算法,也就是說,多個相同的值的相對位置也許會在演算法結束時產生變動。一趟快速排...