-
題目描述:
C/C++中有一個快速排序的标準庫函數 qsort,在stdlib.h 中聲明,其原型為:
void qsort(void *base,int nelem, unsigned int width,int (*pfCompare)( const void *, const void *));
其中base為待排序資料,nelem為元素數目,width為每個元素長度,機關為位元組,pfCompare為一個比較函數。
根據qsort 函數的用法規定,“比較函數”的原型應是:
int 函數名(const void * elem1, const void * elem2);
如果* elem1 應該排在 * elem2 前面,則函數傳回值是負整數;
如果* elem1 應該排在 * elem2 後面,則函數傳回值是正整數;
如果* elem1和* elem2順序無所謂,則函數傳回0。
請程式設計實作調用該庫函數,實作一個較大整數數組的增序快速排序。
題目要求:
輸入——第一行為整數元素數目N, 第二行為N個整數,用空格分隔。
輸出——N個從小到大排好的整數,用空格分開。
#include <stdio.h>
快速排序:快速排序采用了一種分治政策——将原問題分解成若幹個規模更小但是結構跟原問題相似的子問題。這些子問題的解決則利用了遞歸思想#include <stdlib.h> int compare(constvoid *a,const void *b)// 定義不是任何類型的指針常量,但是可以是任何類型的指針。 { return *(int *)a - *(int *)b; //如果* elem1 應該排在 * elem2 前面,則函數傳回值是負整數; //如果* elem1 應該排在 * elem2 後面,則函數傳回值是正整數; //如果* elem1和* elem2順序無所謂; } int main()//主函數 { int i,N; scanf("%d",&N);//讀入需要排序數組中的元素數目 int a[N]; for(i=0;i<N;i++) { scanf("%d",&a[i]);//讀入需要排序的數組 } qsort(a, N, sizeof(a[0]),compare);//對數組進行排序 //!!!注意參數填寫完整 for(i = 0; i <N ; i ++) { printf("%d ", a[i]);//輸出排序結束以後的數組 } printf("\n"); return 0; }