C语言中冒泡排序,插入排序,选择排序
来源:互联网 发布:怎样进行淘宝网店定位 编辑:程序博客网 时间:2024/05/30 02:26
冒泡排序:
思路:将相邻的两个数比较,将较小的数调到前头;有n个数就要进行n-1趟比较,第一次比较中要进行n-1次两两比较,在第j趟比较中,要进行n-j次两两比较。
实现代码:
点击(此处)折叠或打开
- void BublleSort (int arr[],int count)
- {
- int i, j, temp;
- for(j=0; j<count-1; j ) /* 冒泡法要排序n-1次*/
- for(i=0; i<count-j-1; i )/* 值比较大的元素沉下去后,只把剩下的元素中的最大值再沉下去就可以啦*/
- {
- if(arr[i]>arr[i 1])/* 把值比较大的元素沉到底 */
- {
- temp=arr[i 1];
- arr[i 1]=arr[i];
- arr[i]=temp;
- }
- }
- }
插入排序:
思路:在得到要排序的数组以后,讲数组分为两个部分,数组的第一个元素为一个部分,剩下的元素为一部分,然后从数组的第二个元素开始,和该元素以前的所有元素比较,如果之前的元素没有比该元素大的,那么该元素的位置不变,如果有元素的值比该元素大,那么记录相爱他所在的位置;例如I,该元素的位置为k,则将从i到k位置上的所有元素往后移动一位,然后将k位置上的值移动到i位置上。这样就找到了K所在的位置。每一个元素都这样进行,最终就会得到排好顺序的数组。
实现代码:
点击(此处)折叠或打开
- void InsertSort (int arr[],int count)
- {
- int i,j,temp;
- for(i=1; i<count; i)//数组分两个部分,从第二个数组元素开始
- {
- temp = arr[i];//操作当前元素,先保存在其它变量中
- for(j=i-1; j>-1&&arr[j]>temp;j--)//从当前元素的上一个元素开始查找合适的位置,一直查找到首元素
- {
- arr[i]= arr[j];
- arr[j]= temp;
- }
- }
- }
选择排序:
思路:
首先以一个元素为基准,从一个方向开始扫描,比如从左到右扫描,以A[0]为基准,接下来从A[0]….A[9]中找出最小的元素,将其与A[0]交换。然后将其基准位置右移一位,重复上面的动作,比如,以A[1]为基准,找出A[1]~A[9]中最小的,将其与A[1]交换。一直进行到将基准位置移到数组最后一个元素时排序结束。
实现代码:
点击(此处)折叠或打开
- void SelectSort(int arr[],int count)
- {
- int i,j,min,temp;
- for(i=0; i<count; i)
- {
- min = arr[i];//以此元素为基准
- for(j=i 1; j<count; j)//从j往前的数据都是排好的,所以从j开始往下找剩下的元素中最小的
- {
- if(min>arr[j])//把剩下元素中最小的那个放到arr[j]中
- {
- temp = arr[j];
- arr[j]= min;
- min = temp;
- }
- }
- }
- }
效率比较:
为了能够更加明显的查看其效果,将每个排序算法执行10000次。下面是测试程序主函数:
1.#include <stdio.h>2.#include<stdlib.h>3.#include <sys/time.h>4.#include <unistd.h>5.6.#define MAX 67.8.int array[MAX];9.int count = MAX;10.11./********创建数组,并输入元素************/12.void BuildArray()13.{14. int a,i=0;15. printf("请输入数组元素: ");16. for(; i<count; i )17. {18. scanf("%d", &a);19. array[i] = a;20. }21. printf("\n");22.}23./**********遍历输出数组元素*************/24.void Traverse(int arr[], int count)25.{26. int i;27. printf("数组输出: ");28. for(i=0; i<count; i )29. printf("%d\t", arr[i]);30. printf("\n");31.}32.void BublleSort(int arr[], int count)33.{34. int i,j,temp;35. for(j=0; j<count-1; j ) /* 气泡法要排序n-1次*/36. for(i=0; i<count-j-1; i )/* 值比较大的元素沉下去后,只把剩下的元素中的最大值再沉下去就可以啦 */37. {38. if(arr[i]>arr[i 1])/* 把值比较大的元素沉到底 */39. {40. temp=arr[i 1];41. arr[i 1]=arr[i];42. arr[i]=temp;43. }44. }45.}46.47.void InsertSort(int arr[],int count)48.{49. int i,j,temp;50. for(i=1; i<count; i )//数组分两个部分,从第二个数组元素开始51. {52. temp = arr[i];//操作当前元素,先保存在其它变量中53. for(j=i-1; j>-1&&arr[j]>temp;j--)//从当前元素的上一个元素开始查找合适的位置,一直查找到首元素54. {55. arr[i] = arr[j];56. arr[j] = temp;57. }58. }59.}60.61.void SelectSort(int arr[], int count)62.{63. int i,j,min,temp;64. for(i=0; i<count; i )65. {66. min = arr[i];//以此元素为基准67. for(j=i 1; j<count; j )//从j往前的数据都是排好的,所以从j开始往下找剩下的元素中最小的68. {69. if(min>arr[j])//把剩下元素中最小的那个放到arr[j]中 70. {71. temp = arr[j];72. arr[j] = min;73. min = temp;74. }75. }76. }77.}78.79.int main()80.{ 81. int i;82. struct timeval tv1,tv2;83. struct timezone tz;84. BuildArray();//创建数组85. Traverse(array, count);//输出最初数组86. gettimeofday(&tv1,&tz);87. for(i=0;i<10000;i++)88. BublleSort(array, count);//冒泡排序89. gettimeofday(&tv2,&tz);90. printf("%d:%d/n",tv2.tv_sec-tv1.tv_sec,tv2.tv_usec-tv1.tv_usec);91. Traverse(array, count);//输出排序后的数组92. 93. gettimeofday(&tv1,&tz);94. for(i=0;i<10000;i++)95. InsertSort(array, count);//插入排序96. gettimeofday(&tv2,&tz);97. printf("%d:%d/n",tv2.tv_sec-tv1.tv_sec,tv2.tv_usec-tv1.tv_usec);98. Traverse(array, count);//输出排序后的数组99. 100. gettimeofday(&tv1,&tz);101. for(i=0;i<10000;i++)102. SelectSort(array, count);//插入排序103. gettimeofday (&tv2,&tz);104. printf("%d:%d/n",tv2.tv_sec-tv1.tv_sec,tv2.tv_usec-tv1.tv_usec); 105. Traverse(array, count);//输出排序后的数组106. return 0;107.}
编译:gcc –g –Wall sort_test.c –o sort_test
运行:./sort_test
结果如下:
通过多次测试,插入排序的速度最快。
- C语言中冒泡排序,插入排序,选择排序
- 冒泡排序、插入排序、选择排序--C语言实现
- 【C语言】冒泡排序,选择排序,插入排序
- c语言实现选择排序、冒泡排序、插入排序
- c语言中冒泡排序、插入排序、选择排序算法比较
- c语言中冒泡排序、插入排序、选择排序算法比较
- c语言中冒泡排序、插入排序、选择排序算法比较
- c语言排序之冒泡排序,选择排序,插入排序,快速排序总结
- C语言排序算法集锦:选择排序,冒泡排序,插入排序,希尔排序,归并排序,堆排序,快排序
- c语言中冒泡和选择排序
- c语言各种常见排序(直接插入排序、折半插入排序、冒泡排序、选择排序、堆排序)
- C语言程序----排序(直接插入排序,SHELL排序,冒泡排序,快速排序,简单选择排序,堆排序)
- 冒泡排序,插入排序,选择排序和快速排序-C语言
- C语言 冒泡排序 快速排序 直接插入排序 选择排序
- C语言单链表的3种排序算法,插入排序,冒泡排序,选择排序
- C语言:冒泡排序、选择排序、快速排序、插入排序、“shell”法
- C语言单链表的3种排序算法,插入排序,冒泡排序,选择排序
- C语言冒泡选择排序
- tcp窗口机制(写的最简单精炼的文章)
- 仿2048游戏代码
- SQLite数据库框架ORMLite与GreenDao的简单比较
- 中国教育还有英国教育
- IT
- C语言中冒泡排序,插入排序,选择排序
- mysql中批量修改所有数据表的格式为utf8
- HDOJ-3037(组合数学)
- 第一支小爬虫
- 列表项中包含按钮的ListView的点击事件的响应
- android应用基础--由官方帮助文件翻译
- Ubuntu12.04中的截图
- C++ 3维数组指针声明的3种方式
- POJ3384Feng Shui【半平面交】