当前位置:首页 > C语言各种排序源代码
[C语言] 各种排序—你都会吗(计数排序,基数排序,快速排序,...) [复制链接] raotf
共包含
\插入排序\快速排序\归并排序\冒泡排序\选择排序\希尔排序\计数排序\基数排序\堆排序 \
版主 主题
17 帖子
298 C币
1093 枚 在线时间
220 小时 ?
串个门 ? 加好友 ? 打招呼 ? 发消息
1. #include
8.
//把函数名,变量名和母语(拼音)联想下,别跟英语想一块去了~~~~ 9.
10. #define MAX 123456 //长度 11. #define PAIXU_CHARU 0 //插入排序 12. #define PAIXU_KUAISU 1 //快速排序 13. #define PAIXU_GUIBING 2 //归并排序 14. #define PAIXU_MAOPAO 3 //冒泡排序 15. #define PAIXU_XUANZE 4 //选择排序 16. #define PAIXU_XIER 5 //希尔排序 17. #define PAIXU_YIERSAN 6 //计数排序 18. #define PAIXU_GESHIBAI 7 //基数排序 19. #define PAIXU_DUI 8 //堆排序 20. #define PAIXU_QSORT 9 //qsort函数 21.
22. #define FANGFASHU 10 //方法总数 23. 24.
25. void data_shuchu(int* p,int leng); //打印数组
26. void data_fuzhi(int* p,int* data,int leng); //拷贝数
组 27.
28. void paixu_maopao(int* p,int leng,int (* cmp)(const
void* a,const void* b));
29. void paixu_xuanze(int* p,int leng,int (* cmp)(const
void* a,const void* b)); 30. void paixu_charu(int* p,int leng,int (* cmp)(const void*
a,const void* b));
31. void paixu_kuaisu(int* p,int leng,int (* cmp)(const
void* a,const void* b));
32. void paixu_xier(int* p,int leng,int (* cmp)(const void*
a,const void* b));
33. void paixu_geshibai(int* p,int leng,int (* cmp)(const
void* a,const void* b));
34. void paixu_dui(int* p,int leng,int (* cmp)(const void*
a,const void* b));
35. int* paixu_guibing(int* p,int leng,int (* cmp)(const
void* a,const void* b));
36. int* paixu_yiersan(int* p,int leng,int (* cmp)(const
void* a,const void* b));
37. int* guibing_hebing(int* zuo_data,int zuo_leng,int*
you_data,int you_leng,int (* cmp)(const void* a,const void* b));
38. int kuaisu_dingwei(int* p,int tou,int wei,int (*
cmp)(const void* a,const void* b));
39. void dui_jian(int* p,int s,int leng,int (* cmp)(const
void* a,const void* b));
40. //上面是各种不同排序的实现函数 41. // int* p----要排序的数组 42. // int leng-----数组的长度
43. // int (* cmp)(const void* a,const void* b)-------排
序方法函数的指针 44. 45.
46. int paixu_fangfa(const void* a,const void* b); //指
定的排序方法
47. double pk_paixu(int* p,int leng,int style,int (*
cmp)(const void* a,const void* b)); 48. //排序并返回所用时间
49. //int style-----指定用什么方法排序 50.
51. void main() 52. { 53.
54. int* data=new int[MAX]; //存放原数据
55. int* p=new int[MAX]; //存放待排序的数据 56. int i;
57. double yongshi; //排序所用的时间 58. double paixu_time[FANGFASHU]={0}; //保存
每种排序的时间总和
59. char* paixu_str[FANGFASHU]={\插入排序\快速
排序\归并排序\冒泡排序\选择排序\希尔排序\计
数排序\基数排序\堆排序 \
60. //排序字符串,一定要跟宏定义的顺序一
样,要不然就会牛头对马嘴了~~~ 61. srand(time(0)); 62. for(i=0;i 63. data[i]=rand(); 64. //给原数据赋值 65. 66. for(i=0;i<3*FANGFASHU;i++) //每种方法调用3 次 67. { 68. if(0==iúNGFASHU) 69. printf(\第%d 轮:\\n\70. 71. data_fuzhi(p,data,MAX); // 把data里德数据复制给p 72. //data_shuchu(p,MAX); //打印数组 73. yongshi=pk_paixu(p,MAX,iúNG FASHU,paixu_fangfa); //排序 74. //data_shuchu(p,MAX); //打印数组 75. paixu_time[iúNGFASHU]+=yong shi; //保存所用时间 76. 77. printf(\排序用 时: %lf\\n\打印所用时间 78. 79. if(FANGFASHU-1==iúNGFASHU) //每轮完后回车 80. printf(\81. } 82. 83. for(int j=0;j 时: %lf\\n\; 85. 86. //打印每种方法所用时间 87. 88. getch(); 89. return; 90. } 91. 92. 93. double pk_paixu(int* p,int leng,int style,int (* cmp)(const void* a,const void* b))//排序并返回所用时间 94. { 95. int* data; //用来保存数据 96. 97. double t_avg; 98. LONGLONG t1_long; 99. LONGLONG t2_long; 100. LARGE_INTEGER litmp; 101. //上面这些变量是用来计算排序时间的 102. 103. QueryPerformanceFrequency(&litmp); 104. t_avg=litmp.QuadPart; 105. //得到计算时间的频率 106. 107. QueryPerformanceCounter(&litmp); 108. t1_long=litmp.QuadPart; 109. //记下排序前的时间 110. 111. switch(style) 112. { 113. case PAIXU_CHARU: 114. //paixu_charu(p,leng,cmp) ; 115. break; 116. 117. case PAIXU_KUAISU: 118. paixu_kuaisu(p,leng,cmp); 119. break; 120. 121. case PAIXU_GUIBING: 122. data=paixu_guibing(p,leng ,cmp); 123. break; 124. 125. case PAIXU_MAOPAO: 126. //paixu_maopao(p,leng,cmp ); 127. break; 128. 129. case PAIXU_XUANZE:
共分享92篇相关文档