当前位置:   article > 正文

数据结构 排序(冒泡排序改进,简单选择排序链表实现)

数据结构 排序(冒泡排序改进,简单选择排序链表实现)

实验题目:     排序算法实现与比较            

实验环境:    Visual C++ 6.0                    

 

实验八:

实验目的和要求:熟悉多种排序算法,理解每种排序算法思想,掌握排序算法的基本设计方法,掌握排序算法时间复杂度和空间复杂度的分析方法。

实验内容:1.对所讲过算法深入理解。

          2. 将冒泡排序再做进一步的优化。如果有100个数的数组,当前仅前面10个无序,后面90个都已排好序且都大于前面10个数字,那么在该一趟遍历后,最后发生交换的位置必定小于10,且这个位置之后的数据必定已经有序了,记录下这位置,下次只要从数组头部遍历到这个位置就可以了。

           3. 试以单链表为存储结构,实现简单选择排序算法。

          

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<algorithm>
  4. #include<iostream>
  5. #define MAXSIZE 20
  6. using namespace std;
  7. typedef struct
  8. {
  9. int key;
  10. char *otherinfor;
  11. }ElemType;
  12. typedef struct
  13. {
  14. ElemType *r;
  15. int length;
  16. }SqList;
  17. void BubbleSort(SqList &L)//冒泡排序
  18. {
  19. int c,i,m=L.length;
  20. ElemType t;
  21. while(m>0)
  22. {
  23. for(c=0,i=1;i<m;i++)
  24. {
  25. if(L.r[i].key>L.r[i+1].key)
  26. {
  27. t=L.r[i];
  28. L.r[i]=L.r[i+1];
  29. L.r[i+1]=t;
  30. c=i;
  31. }
  32. }
  33. m=c;
  34. }
  35. }
  36. void CreatSqList(SqList &L)
  37. {
  38. int i,n;
  39. printf("请输入数据个数(<MAXSIZE)\n");
  40. scanf("%d",&n);
  41. printf("请输入待排序的序列\n");
  42. for(i=1;i<=n;i++)
  43. {
  44. scanf("%d",&L.r[i].key);
  45. L.length++;
  46. }
  47. }
  48. void ShowSqList(SqList L)
  49. {
  50. int i;
  51. for(i=1;i<=L.length;i++)
  52. {
  53. cout<<L.r[i].key<<endl;
  54. }
  55. printf("\n");
  56. }
  57. typedef struct LNode
  58. {
  59. int data;
  60. struct LNode *next;
  61. }LNode, *LinkList;
  62. void InitList(LinkList &L)
  63. {
  64. L=(LNode*)malloc(sizeof(LNode));
  65. L->next=NULL;
  66. }
  67. void IntPut(LinkList &L,int m)
  68. {
  69. int i;
  70. LinkList r,p;
  71. r=L;
  72. for(i=0;i<m;i++)
  73. {
  74. p=(LNode*)malloc(sizeof(LNode));
  75. cin>>p->data;
  76. p->next=NULL;
  77. r->next=p;
  78. r=p;
  79. }
  80. }
  81. void OutPut(LinkList &L)
  82. {
  83. LinkList p;
  84. p=(LNode*)malloc(sizeof(LNode));
  85. p=L->next;
  86. while(p)
  87. {
  88. printf("%d ",p->data);
  89. p=p->next;
  90. }
  91. }
  92. void SelectSort(LinkList &L)//简单选择排序
  93. {
  94. LinkList r,q,p=L->next;
  95. int t;
  96. while(p)
  97. {
  98. q=p->next;
  99. r=p;
  100. while(q)
  101. {
  102. if(q->data<r->data)
  103. r=q;
  104. q=q->next;
  105. }
  106. if(r!=p)
  107. {
  108. t=r->data;
  109. r->data=p->data;
  110. p->data=t;
  111. }
  112. p=p->next;
  113. }
  114. }
  115. int main()
  116. {
  117. SqList L;
  118. LinkList Q;
  119. int m;
  120. L.r=(ElemType*)malloc(sizeof(ElemType));
  121. L.length=0;
  122. CreatSqList (L);
  123. BubbleSort(L);
  124. ShowSqList(L);
  125. printf("请输入需要排序的数的个数\n");
  126. scanf("%d",&m);
  127. InitList(Q);
  128. IntPut(Q,m);
  129. SelectSort(Q);
  130. OutPut(Q);
  131. }

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

闽ICP备14008679号