用冒泡排序实现快速排序
2016-08-19 14:42
274 查看
题目:实现bubble_sort,可以排序各种类型数据。
程序如下:
程序如下:
#include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct Stu { char name[10]; int age; float score; }Stu,* pstu; int Compare_int(const void * elem1, const void * elem2) { return *(int *)elem1 - *( int*)elem2 ; } int Compare_Str(const void * elem1, const void * elem2) { return strcmp(*(char **)elem1 ,*( char**)elem2 ); } int Compare_Stu(const void * elem1, const void * elem2) { return ((pstu )elem1)->age - ((( pstu)elem2 )->age); } void swap(char *buf1, char*buf2 , size_t width) { int i = 0; for (i = 0; i < (int )width; i++) { int tmp = buf1 [i]; buf1[i] = buf2 [i]; buf2[i] = tmp; } } void bubble_sort(void *base, size_t sz , size_t width, int (*cmp)( const void *elem1, const void *elem2)) { int i = 0; for (i = 0; i < (int )sz - 1; i++) { int j = 0; for (j = 0; j < (int )sz - 1 - i; j++) { if (cmp ((char*) base + j*width , (char*) base + (j + 1)*width)>0) { swap(( char*)base + j*width, ( char*)base + (j + 1)*width, width ); } } } } void Printf_int() { int arr[] = { 2, 4, 6, 8, 1, 3, 5, 7 }; int i = 0; int sz = sizeof (arr) / sizeof(arr[0]); bubble_sort(arr, sz, sizeof(int ), Compare_int); for (i = 0; i < sz; i++) { printf( "%d\n", arr[i]); } } void Printf_Str() { int i = 0; char *arr[] = { "aaaa" , "dddd", "bbbb", "cccc" }; int sz = sizeof (arr) / sizeof(arr[0]); bubble_sort(arr, sz, sizeof(char *), Compare_Str); for (i = 0; i < sz; i++) { printf( "%s\n", arr[i]); } } void Printf_Stu() { int i = 0; struct Stu stu[] = { { "zhangsan", 18, 78.0f }, { "lisi", 19, 65.0f }, { "wangwu", 18, 99.8f } }; int sz = sizeof (stu) / sizeof(stu[0]); bubble_sort(stu, sz, sizeof(Stu ), Compare_Stu); for (i = 0; i < sz; i++) { printf( "name:%s age:%d score:%f\n" , stu[i].name, stu[i].age, stu[i].score); } } int main() { Printf_int(); printf( "-------------\n"); Printf_Str(); printf( "-------------\n"); Printf_Stu(); system( "pause"); return 0; }运行结果如下:
相关文章推荐
- C#实现所有经典排序算法(选择排序,冒泡排序,快速排序,插入排序,希尔排序)
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- C++实现直接插入排序,折半插入排序,希尔排序,冒泡排序,简单选择排序,快速排序,堆排序
- java实现各种基础排序(冒泡排序、快速排序、直接选择排序、堆排序、直接插入排序、归并排序)
- 插入排序、冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序和LST基数排序——C++实现
- Java分别实现冒泡排序、插入排序、快速排序、选择排序、交换排序
- 冒泡排序、选择排序、堆排序、快速排序、插入排序算法复杂度分析与算法实现(自己总结与转)
- JavaScript实现冒泡排序、快速排序、插入排序
- 快速排序和冒泡排序的时间复杂度分析(C++算法实现对比)
- 快速排序,冒泡排序,直接选择排序的算法实现
- Java实现冒泡排序和快速排序,选择…
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 冒泡排序、选择排序、堆排序、快速排序、插入排序算法复杂度分析与算法实现(自己总结与转)
- C语言实现基本排序算法----排序(直接插入排序,SHELL排序,冒泡排序,快速排序,简单选择排序,堆排序)
- 各种排序算法实现——基数排序、归并排序、插入排序、冒泡排序、选择排序、快速排序、堆排序、希尔排序
- 十二.C语言8种排序算法及其实现 1.希尔排序 2.二分插入法 3.直接插入法 4.带哨兵的直接排序法 5.冒泡排序 6.选择排序 7.快速排序 8.堆排序
- 几种常见排序算法之Java实现(插入排序、希尔排序、冒泡排序、快速排序、选择排序、归并排序)
- 常见排序算法实现(直接插入排序,冒泡排序,快速排序,简单选择排序)
- 交换排序——冒泡排序和快速排序,C++代码实现
- C语言8种排序算法及其实现 1.希尔排序 2.二分插入法 3.直接插入法 4.带哨兵的直接排序法 5.冒泡排序 6.选择排序 7.快速排序 8.堆排序