<笔试><面试>编写一个排序函数,实现,既可以排序整形数组,又可以排序字符串。
2016-06-05 10:57
966 查看
思路:仿照qsort函数运用函数指针实现排序整形数组、排序字符串的功能。
首先,编写整形数组比较函数和字符串比较函数;
其次,仿照qsort函数将首元素地址、元素个数、元素大小、比较函数 传参编写熟悉的冒泡排序函数;
最后,举例验证函数正确性。
首先,编写整形数组比较函数和字符串比较函数;
其次,仿照qsort函数将首元素地址、元素个数、元素大小、比较函数 传参编写熟悉的冒泡排序函数;
最后,举例验证函数正确性。
/******************************/ //1.编写冒泡排序,可以排序整形数组,也可以排序字符串。 #include<stdio.h> #include<stdlib.h> #include<assert.h> void bobble(const void *base, int length, int width, int(*fcmp)(const void *a, const void *b))//(*fcmp)()函数指针 { assert(base);//断言 int i = 0, j = 0, k = 0; char *arr = (char *)base; char temp='\0'; for (i = 0; i < length - 1; i++) for (j = 0; j < length - i - 1; j++) { if ((*fcmp)(arr, arr + width * j)>0)//传参 将该元素地址与下一元素地址传入函数 { for (k = 0; k < width * j; k++)//运用循环在内存中实现对两元素进行交换 { temp = *(arr + k); *(arr + k) = *(arr + k + width * j); *(arr + k + width * j) = temp; } } } } int int_cmp1(const void *a, const void *b) { assert(a); assert(b); return *(int *)a - *(int *)b; } int str_cmp(const void *a, const void *b) { assert(a); assert(b); char *arr1 = (char *)a; char *arr2 = (char *)b; while (*arr1&&*arr2&&*arr1++ == *arr2++) ; return *(arr1 - 1) - *(arr2 - 1); } int main() { int str1[] = { 1,5,0,2,4,7,9,6,3,5,6 ,16,155,26}; int size = sizeof(str1) / sizeof(str1[0]); char str2[][30] = { "abcd","3456","cdef","1234" ,"abce"}; int size_str = sizeof(str2) / sizeof(str2[0]); int i = 0; qsort(str1, size, sizeof(str1[0]), int_cmp1);//用快排函数结果作比较 for (i = 0; i < size; i++) printf("%d ", str1[i]); printf("\n"); bobble(str1, size, sizeof(str1[0]), int_cmp1); for (i = 0; i < size; i++) printf("%d ", str1[i]); printf("\n"); qsort(str2, size_str, sizeof(str2[0]), str_cmp);//用快排函数结果作比较 for (i = 0; i < size_str; i++) printf("%s\n", str2[i]); bobble(str2, size_str, sizeof(str2[0]), str_cmp); for (i = 0; i < size_str; i++) printf("%s\n", str2[i]); system("pause"); return 0; }
相关文章推荐
- <笔试><面试>单链表相关(1)从尾到头打印链表、删除一个无头链表的非尾结点
- 笔试面试单链表相关(2)在任意位置前插入结点、逆置链表
- 笔试面试,单链表相关(3)遍历一次找中间结点、倒数第K个结点
- 机器学习算法知识梳理--面试
- Java程序员必须掌握的排序算法Java实现整合一 :插入排序
- 面试算法总结
- iOS面试问题汇总
- 黑马程序员——Java基础---面向对象(构造方法和static关键字)
- 一道面试题中涉及到的SQL的高级使用
- 记我的一次电话面试 (转)
- 剑指Offer----面试题21:包含min函数的栈
- 展望未来,总结过去10年的程序员生涯,给程序员小弟弟小妹妹们的一些总结性忠告
- android常见面试题与回答 (二)
- java里的值传递和引用类型传递的经典面试题
- 一个工作一年半的程序员的自述(四)
- 面试题:从给定的N个正数中选取若干个数之和最接近M
- 面试题1:类的赋值运算符函数
- 赢在职场-WEB全栈开发-1-9 文本样式概览
- iOS开发---block面试题总结(一)
- 赢在职场-WEB全栈开发-1-8盒子模型