生活随笔
收集整理的這篇文章主要介紹了
一个泛型冒泡排序的实现
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
無聊中,于是寫了一個冒泡排序的泛型算法。算法很簡單,但是個人覺得從C標準庫中學到的這種泛型的思想很有益處。
/*
* 冒泡排序的泛型實現(xiàn)
*/#include <stdio.h>
#include <string.h>static void Swap(char *vp1, char *vp2, int width)
{char tmp;if ( vp1 != vp2 ) {while ( width-- ) {tmp = *vp1;*vp1++ = *vp2;*vp2++ = tmp;}}
}void BubbleSort(void *base, int n, int elem_size,int (*compare)( void *, void * ))
{int i, last, end = n - 1;char *elem_addr1, *elem_addr2;while (end > 0) {last = 0;for (i = 0; i < end; i++) {elem_addr1 = (char *)base + i * elem_size;elem_addr2 = (char *)base + (i + 1) * elem_size;if (compare( elem_addr1, elem_addr2 ) > 0) {Swap(elem_addr1, elem_addr2, elem_size);last = i;}}end = last;}
}int compare_int(void *elem1, void *elem2)
{return (*(int *)elem1 - *(int *)elem2);
}int compare_double(void *elem1, void *elem2)
{return (*(double *)elem1 > *(double *)elem2) ? 1 : 0;
}int main(int argc, char *argv[])
{int num_int[8] = {8,7,6,5,4,3,2,1};double num_double[8] = {8.8,7.7,6.6,5.5,4.4,3.3,2.2,1.1};int i;BubbleSort(num_int, 8, sizeof(int), compare_int);for (i = 0; i < 8; i++) {printf("%d ", num_int[i]);}printf("\n");BubbleSort(num_double, 8, sizeof(double), compare_double);for (i = 0; i < 8; i++) {printf("%.1f ", num_double[i]);}return 0;
}
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖
總結(jié)
以上是生活随笔為你收集整理的一个泛型冒泡排序的实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。