当前位置:   article > 正文

数据结构(C语言)直接插入排序、冒泡法排序、选择排序_用c语言实现顺序表l的直接插入排序,并输出每一趟结果的代码

用c语言实现顺序表l的直接插入排序,并输出每一趟结果的代码

7-1 直接插入排序

给定一个整数序列,请按非递减序输出采用直接插入排序的各趟排序后的结果。

输入格式:

测试数据有多组,处理到文件尾。每组测试数据第一行输入一个整数n(1≤n≤100),第二行输入n个整数。

输出格式:

对于每组测试,输出若干行,每行是一趟排序后的结果,每行的每两个数据之间留一个空格。

输入样例:

  1. 4
  2. 8 7 2 1

输出样例:

  1. 7 8 2 1
  2. 2 7 8 1
  3. 1 2 7 8

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define MAXSIZE 20
  4. typedef struct
  5. {
  6. int key;
  7. } RedType;
  8. typedef struct
  9. {
  10. int r[MAXSIZE+1];
  11. int length;
  12. } SqList;
  13. int InsertSort(SqList* L)
  14. {
  15. int i, j;
  16. for(i = 2; i <= L->length; i++)
  17. {
  18. if(L->r[i] < L->r[i-1])
  19. {
  20. L->r[0] = L->r[i];
  21. L->r[i] = L->r[i-1];
  22. for(j = i-2; L->r[0] < L->r[j]; j--)
  23. {
  24. L->r[j+1] = L->r[j];
  25. }
  26. L->r[j+1] = L->r[0];
  27. }
  28. for(int k = 1; k <= L->length; k++)
  29. {
  30. if(k == L->length)
  31. printf("%d", L->r[k]);
  32. else
  33. printf("%d ", L->r[k]);
  34. }
  35. printf("\n");
  36. }
  37. return 1;
  38. }
  39. int main()
  40. {
  41. SqList L;
  42. int n;
  43. while(scanf("%d", &n) != -1)
  44. {
  45. L.length = n;
  46. for(int i = 1; i <= L.length; i++)
  47. {
  48. scanf("%d", &L.r[i]);
  49. }
  50. L.r[0] = -1;
  51. InsertSort(&L);
  52. }
  53. return 0;
  54. }

 

7-2 冒泡法排序

将N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们。通过一遍扫描,则最后一个元素必定是最大的元素。然后用同样的方法对前N−1个元素进行第二遍扫描。依此类推,最后只需处理两个元素,就完成了对N个数的排序。

本题要求对任意给定的K(<N),输出扫描完第K遍后的中间结果数列。

输入格式:

输入在第1行中给出N和K(1≤K<N≤100),在第2行中给出N个待排序的整数,数字间以空格分隔。

输出格式:

在一行中输出冒泡排序法扫描完第K遍后的中间结果数列,数字间以空格分隔,但末尾不得有多余空格。

输入样例:

  1. 6 2
  2. 2 3 5 1 6 4

输出样例:

2 1 3 4 5 6

代码长度限制

16 KB

时间限制

400 ms

内存限制 

64 MB

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define MAXSIZE 200
  4. typedef struct
  5. {
  6. int key;
  7. } RedType;
  8. typedef struct
  9. {
  10. int r[MAXSIZE+1];
  11. int length;
  12. } SqList;
  13. void BubbleSort(SqList *L, int k)
  14. {
  15. int m = L->length-1;
  16. int flag = 1, j;
  17. while((m>0) && flag == 1)
  18. {
  19. flag = 0;
  20. for(j = 1; j <= m; j++)
  21. {
  22. if(L->r[j] > L->r[j+1])
  23. {
  24. flag = 1;
  25. int t = L->r[j];
  26. L->r[j] = L->r[j+1];
  27. L->r[j+1] = t;
  28. }
  29. }
  30. k--;
  31. if(k == 0)
  32. {
  33. for(int i = 1; i <= L->length; i++)
  34. {
  35. if(i == L->length)
  36. printf("%d", L->r[i]);
  37. else
  38. printf("%d ", L->r[i]);
  39. }
  40. }
  41. m--;
  42. }
  43. }
  44. int main()
  45. {
  46. SqList L;
  47. int n, k;
  48. scanf("%d %d", &n, &k);
  49. L.length = n;
  50. for(int i = 1; i <= L.length; i++)
  51. {
  52. scanf("%d", &L.r[i]);
  53. }
  54. BubbleSort(&L, k);
  55. return 0;
  56. }

 

7-3 选择排序

本题要求从键盘读入n个整数,对这些数做选择排序。输出选择排序每一步的结果和最终结果。

输入格式:

输入的第一行是一个正整数n,表示 在第二行中会有n个整数。

输出格式:

输出选择排序每一步的结果和最终结果。

输入样例:

在这里给出一组输入。例如:

  1. 5
  2. 3 7 2 9 1

输出样例:

在这里给出相应的输出。例如:

  1. step 1: 1 7 2 9 3
  2. step 2: 1 2 7 9 3
  3. step 3: 1 2 3 9 7
  4. step 4: 1 2 3 7 9
  5. sorted array: 1 2 3 7 9

注意:

输出的冒号 : 是英文输入法下的符号,冒号后有一个空格。每个整数后有一个空格。

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

 

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define MAXSIZE 20
  4. typedef struct
  5. {
  6. int key;
  7. } RedType;
  8. typedef struct
  9. {
  10. int r[MAXSIZE+1];
  11. int length;
  12. } SqList;
  13. void SelectSort(SqList *L)
  14. {
  15. int i, j, k, t;
  16. for(i = 1; i <= L->length; i++)
  17. {
  18. k = i;
  19. for(j = i+1; j <= L->length; j++)
  20. {
  21. if(L->r[j] < L->r[k])
  22. k = j;
  23. }
  24. if(k != i)
  25. {
  26. t = L->r[i];
  27. L->r[i] = L->r[k];
  28. L->r[k] = t;
  29. }
  30. if(i != L->length)
  31. printf("step %d: ", i);
  32. else
  33. printf("sorted array: ");
  34. for(int s = 1; s <= L->length; s++)
  35. {
  36. printf("%d ", L->r[s]);
  37. }
  38. printf("\n");
  39. }
  40. }
  41. int main()
  42. {
  43. SqList L;
  44. int n;
  45. scanf("%d", &n);
  46. L.length = n;
  47. for(int i = 1; i <= L.length; i++)
  48. {
  49. scanf("%d", &L.r[i]);
  50. }
  51. SelectSort(&L);
  52. return 0;
  53. }

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

闽ICP备14008679号