当前位置:   article > 正文

R6-1 基于顺序表的直接选择排序【有题解视频,可本地编译器调试】_6-2 基于顺序表的直接选择排序【有题解视频,可本地编译器调试】 分数 30 作者 通

6-2 基于顺序表的直接选择排序【有题解视频,可本地编译器调试】 分数 30 作者 通

本题要求实现基于顺序表的直接选择排序算法,要求打印出每一趟的排序结果。

学习答案:

  1. void SelectSort(SqList *L)
  2. {
  3. int i, j, min;
  4. for(i = 0; i < L->length-1; i++)
  5. {
  6. min = i; // 假设无序表的第一个位置为最小值的索引
  7. for (j = i+1; j < L->length; j++) // 从无序表的第一个位置的下一个位置开始遍历
  8. {
  9. if (L->list[min] > L->list[j]) // 如果找到比当前最小值更小的值
  10. {
  11. min = j; // 更新最小值的索引
  12. }
  13. }
  14. if (min != i) // 如果最小值的索引不等于无序表的第一个位置的索引,说明找到了更小的值,需要交换
  15. {
  16. swap(L, i, min); // 交换无序表的第一个位置和最小值位置的元素
  17. }
  18. TraverList(*L); // 打印当前趟的排序结果
  19. }
  20. }

顺序表的结构体定义如下

 
  1. typedef int DataType;
  2. #define LISTSIZE 100
  3. typedef struct
  4. {
  5. DataType list[LISTSIZE];
  6. int length;
  7. }SqList;

函数接口定义:

 
void BubbleSort(SqList *L);

L 是用户传入的参数,代表待排序的顺序表,也是排序后返回的顺序表。要求打印出每一趟的排序结果。

裁判测试程序样例:

 
  1. #include <stdio.h>
  2. typedef int DataType; // 定义具体数据类型
  3. #define LISTSIZE 100 // LISTSIZE 表示顺序表可能的最大数据元素数目
  4. /****** 顺序表存储结构 ******/
  5. typedef struct
  6. {
  7. DataType list[LISTSIZE];
  8. int length;
  9. }SqList;
  10. /****** 初始化顺序表 ******/
  11. int InitList(SqList* L) // L为指向顺序表的指针
  12. {
  13. L->length = 0;
  14. return 1;
  15. }
  16. /****** 求顺序表表长 ******/
  17. int ListLenth(SqList L) // L为顺序表
  18. {
  19. return L.length;
  20. }
  21. /****** 判断顺序表是否为空 ******/
  22. int ListEmpty(SqList L) // L为顺序表
  23. {
  24. if (L.length <= 0)
  25. {
  26. return 1;
  27. }
  28. else
  29. {
  30. return 0;
  31. }
  32. }
  33. /****** 向顺序表插入元素 ******/
  34. int ListInsert(SqList* L, int pos, DataType item)
  35. { // L为指向顺序表的指针,pos为插入位置,item为待插入的数据元素
  36. int i;
  37. if (L->length >= LISTSIZE) // 判断顺序表是否已满
  38. {
  39. printf("顺序表已满,无法插入\n");
  40. return 0;
  41. }
  42. if (pos <= 0 || pos > L->length + 1)
  43. { // 检查元素插入位置是否在顺序表里
  44. printf("插入位置不合法\n");
  45. return 0;
  46. }
  47. for (i = L->length - 1; i >= pos - 1; i--)
  48. { // 移动数据元素
  49. L->list[i + 1] = L->list[i];
  50. }
  51. L->list[pos - 1] = item; // 插入元素
  52. L->length++; // 表长加一
  53. return 1;
  54. }
  55. /****** 遍历顺序表 ******/
  56. int TraverList(SqList L) // L为顺序表
  57. {
  58. int i;
  59. for (i = 0; i < L.length; i++)
  60. {
  61. printf("%d ", L.list[i]);
  62. }
  63. printf("\n");
  64. return 1;
  65. }
  66. /* 交换顺序表里下标为i和j的两个结点 */
  67. void swap(SqList* L, int i, int j)
  68. {
  69. DataType temp = L->list[i];
  70. L->list[i] = L->list[j];
  71. L->list[j] = temp;
  72. }
  73. /* 本题要求函数 */
  74. void BubbleSort(SqList* L);
  75. int main()
  76. {
  77. SqList L;
  78. DataType x;
  79. char ch;
  80. int pos = 1;
  81. InitList(&L);
  82. do
  83. {
  84. scanf("%d", &x); // 某些编译器要求此处改为scanf_s
  85. ListInsert(&L, pos++, x);
  86. } while ((ch = getchar()) != '\n');
  87. BubbleSort(&L);
  88. printf("The sorted List is\n");
  89. TraverList(L);
  90. return 0;
  91. }
  92. /* 请在这里填写答案 */

输入样例:

23 45 12 20 31

输出样例:

  1. 12 45 23 20 31
  2. 12 20 23 45 31
  3. 12 20 23 45 31
  4. 12 20 23 31 45
  5. The sorted List is
  6. 12 20 23 31 45

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号