当前位置:   article > 正文

C语言实现各种排序算法_用不同的排 序算法进行排序c语言

用不同的排 序算法进行排序c语言


链接:https://www.nowcoder.com/practice/508f66c6c93d4191ab25151066cb50ef?tpId=40&tqId=21542&tPage=11&rp=11&ru=/ta/kaoyan&qru=/ta/kaoyan/question-ranking
来源:牛客网

题目描述

    对输入的n个数进行排序并输出。 
输入描述:
    输入的第一行包括一个整数n(1<=n<=100)。
    接下来的一行包括n个整数。


输出描述:
    可能有多组测试数据,对于每组数据,将排序后的n个整数输出,每个数后面都有一个空格。
    每组测试数据的结果占一行。

输入例子:
4
1 4 3 2

输出例子:
1 2 3 4 

AC code:

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<stdio.h>
  4. #include<map>
  5. #include<math.h>
  6. #include<string.h>
  7. #include<queue>
  8. #include<vector>
  9. #include<set>
  10. #define LL long long
  11. #define exp 1e-9
  12. #define MAXN 1000010
  13. using namespace std;
  14. /*插入排序*/
  15. void InsertSort(int R[],int n)
  16. {
  17. int i,j,tmp;
  18. for(i=2;i<=n;i++)
  19. {
  20. tmp=R[i];
  21. j=i-1;
  22. while(j>=1 && R[j]>tmp)
  23. {
  24. R[j+1]=R[j];
  25. j--;
  26. }
  27. R[j+1]=tmp;
  28. }
  29. }
  30. /*选择排序*/
  31. void SelectSort(int R[],int n)
  32. {
  33. int i,j,k,tmp;
  34. for(i=1;i<=n;i++)
  35. {
  36. k=i;
  37. for(j=i+1;j<=n;j++)
  38. {
  39. if(R[j]<R[k])
  40. {
  41. k=j;
  42. }
  43. }
  44. tmp=R[i];
  45. R[i]=R[k];
  46. R[k]=tmp;
  47. }
  48. }
  49. /*冒泡排序*/
  50. void BubbleSort(int R[],int n)
  51. {
  52. int i,j,tmp,flag;
  53. for(i=n;i>=2;i--)
  54. {
  55. flag=0;
  56. for(j=1;j<i;j++)
  57. {
  58. if(R[j]>R[j+1])
  59. {
  60. tmp=R[j];
  61. R[j]=R[j+1];
  62. R[j+1]=tmp;
  63. flag=1;
  64. }
  65. }
  66. if(flag==0)
  67. return;
  68. }
  69. }
  70. /*快速排序*/
  71. void QuickSort(int R[],int l,int r)
  72. {
  73. int i,j,tmp;
  74. i=l;
  75. j=r;
  76. if(i<j)
  77. {
  78. tmp=R[l];
  79. while(i!=j)
  80. {
  81. while(i<j && R[j]>tmp) --j;
  82. if(i<j)
  83. {
  84. R[i]=R[j];
  85. ++i;
  86. }
  87. while(i<j && R[i]<tmp) ++i;
  88. if(i<j)
  89. {
  90. R[j]=R[i];
  91. --j;
  92. }
  93. }
  94. R[i]=tmp;
  95. QuickSort(R,l,i-1);
  96. QuickSort(R,i+1,r);
  97. }
  98. }
  99. /*堆排序*/
  100. void Sift(int R[],int low,int high)
  101. {
  102. int i=low,j=2*i;
  103. int tmp=R[i];
  104. while(j<=high)
  105. {
  106. if(j<high && R[j]<R[j+1])
  107. {
  108. ++j;
  109. }
  110. if(tmp<R[j])
  111. {
  112. R[i]=R[j];
  113. i=j;
  114. j=2*i;
  115. }
  116. else
  117. break;
  118. }
  119. R[i]=tmp;
  120. }
  121. void heapSort(int R[],int n)
  122. {
  123. int i;
  124. int tmp;
  125. for(i=n/2;i>=1;--i)
  126. {
  127. Sift(R,i,n);
  128. }
  129. for(i=n;i>=2;--i)
  130. {
  131. tmp=R[1];
  132. R[1]=R[i];
  133. R[i]=tmp;
  134. Sift(R,1,i-1);
  135. }
  136. }
  137. /*归并排序*/
  138. #define N 100010
  139. int tmp[N],R[N];
  140. int ans=0;//顺带求逆序数
  141. void Merge(int l,int m,int r)
  142. {
  143. int i=l;
  144. int j=m+1;
  145. int k=l;
  146. while(i<=m && j<=r)
  147. {
  148. if(R[i]>R[j])
  149. {
  150. tmp[k++]=R[j++];
  151. ans+= m-i+l;
  152. }
  153. else
  154. {
  155. tmp[k++]=R[i++];
  156. }
  157. }
  158. while(i<=m)
  159. tmp[k++]=R[i++];
  160. while(j<=r)
  161. tmp[k++]=R[j++];
  162. for(i=l;i<=r;i++)
  163. {
  164. R[i]=tmp[i];
  165. }
  166. }
  167. void MergeSort(int l,int r)
  168. {
  169. if(l<r)
  170. {
  171. int m=(l+r)>>1;
  172. MergeSort(l,m);
  173. MergeSort(m+1,r);
  174. Merge(l,m,r);
  175. }
  176. }
  177. int main()
  178. {
  179. // freopen("D:\\in.txt","r",stdin);
  180. int len,i;
  181. while(scanf("%d",&len)!=EOF)
  182. {
  183. for(i=1;i<=len;i++)
  184. {
  185. scanf("%d",&R[i]);
  186. }
  187. // InsertSort(R,len);
  188. // SelectSort(R,len);
  189. // BubbleSort(R,len);
  190. // QuickSort(R,1,len);
  191. // heapSort(R,len);
  192. MergeSort(1,len);
  193. for(i=1;i<=len;i++)
  194. {
  195. printf("%d ",R[i]);
  196. }
  197. puts("");
  198. }
  199. }


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/584337
推荐阅读
相关标签
  

闽ICP备14008679号