如何利用C函數庫中的 qsort 來排序
|
下載範例<qsort.cpp> #include <stdio.h> #include <stdlib.h> #include<time.h>
int compare(const
void *a, const void *b)//這函式是 qsort 所需的比較函式 /* 字串部分比較 可以利用下列部分 int compare( const void *a, const void *b) { return( strcmp((char *)a,(char *)b) ); } */
void main() { int a[100],i; srand((unsigned) time(NULL)); for(i=0;i<100;i++) for(unsigned i = 0; i < 100;
i++) printf("\n"); /*qsort 函數說明 ->>需要 #include<stdlib.h> void qsort(void* base, size_t n, size_t size, int (*cmp)(const void*, const void*)):陣列基礎的快速排序法函數,陣列是參數 base,n 是陣列大小,size 是每個元素的大小,最後的參數是指向函數的指標,這是比較元素大小的函數( 即上面 compare() 函數)。 */ qsort((void *)a, 100, sizeof(a[0]), compare); for(unsigned i = 0; i < 100; i++) { printf(" %d\t", a[i]); //印出排序後的內容 } system("PAUSE"); } |
| 以下來自Delphi
K Top討論區
brant所發表
給你一個 sample
code ,比 float 用 strcmp 去比也許會容易讓人搞不清楚:
#include <iostream>
using namespace std;
int compare( const void *arg1, const void *arg2 )
{
long double ret = *(long double*)(arg1)-*(long double*)(arg2);
if (ret>0) return 1;
if (ret<0) return -1;
return 0;
}
void main()
{
long double test[5];
int i;
test[0] = 0.257932167931;
test[1] = 0.597136798769;
test[2] = 0.166879313246;
test[3] = 1.267498764654;
test[4] = 0.649843143498;
qsort(test,5,sizeof(long double),compare);
for (i=0;i<5;i++) {
cout << test[i] <<endl;
}
}
//以下改成DEV C++可執行 by hlf
#include <iostream.h>
int compare( const void *arg1, const void *arg2 )
long double ret = *(long double*)(arg1)-*(long double*)(arg2);
void main()
|
其他可以參閱The Counting Sort Algorithm