C语言各种排序源代码 联系客服

发布时间 : 星期一 文章C语言各种排序源代码更新完毕开始阅读5f1a2e48e518964bcf847cf8

[C语言] 各种排序—你都会吗(计数排序,基数排序,快速排序,...) [复制链接] raotf

共包含

\插入排序\快速排序\归并排序\冒泡排序\选择排序\希尔排序\计数排序\基数排序\堆排序 \

版主 主题

17 帖子

298 C币

1093 枚 在线时间

220 小时 ?

串个门 ? 加好友 ? 打招呼 ? 发消息

1. #include 2. #include 3. #include 4. #include 5. #include 6. #include 7.

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: