鱼C论坛

 找回密码
 立即注册
查看: 1809|回复: 7

[已解决]在一个有序数组中插入一个数,插入后的数组仍然有序

[复制链接]
发表于 2019-5-22 23:09:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
不用指针还能有简洁一点的办法么
  1. /*在一个有序数组中插入一个数,插入后的数组仍然有序*/
  2. #include <stdio.h>
  3. #include <time.h>
  4. #include "E:\Administrator\Documents\My C\My C Function\Function.c"
  5. void main()
  6. {
  7.     int key, s, n;
  8.     srand(time(NULL));
  9.     n = rand() % 5 + 11; //数组的大小取值范围
  10.     int arr[n], barr[n + 1];
  11.     for (int i = 0; i < n; i++)
  12.     {
  13.         arr[i] = rand() % (n * n); //数组元素的取值范围
  14.     }
  15.     mppx(arr, n); //自定义的大小排序函数

  16.     printf("请输入要插入的数:"); //开始插入数字
  17.     scanf("%d", &key);
  18.     for (int j = 0; j < n; j++)
  19.     {

  20.         barr[j] = arr[j];

  21.         barr[j + 1] = key;
  22.     }
  23.     printf("重新排序\n");
  24.     mppx(barr, n + 1);
  25.     //找出key的位置
  26.     arrsch(barr, n + 1, key); //自定义数组元素搜索函数
  27. }
复制代码

-----------------------------------------------------------------------------------------------------------------------------
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

E:\Administrator\Documents\My C>cmd /C "c:\Users\Administrator\.vscode\extensions\ms-vscode.cpptools-0.23.1\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-j045ujod.jku --stdout=Microsoft-MIEngine-Out-a5oqy2pv.zgo --stderr=Microsoft-MIEngine-Error-jn4wpxuw.mtz --pid=Microsoft-MIEngine-Pid-xaarnarz.uqa --dbgExe=E:\MinGW\bin\gdb.exe --interpreter=mi "
a[0] = 15
a[1] = 22
a[2] = 23
a[3] = 52
a[4] = 54
a[5] = 59
a[6] = 60
a[7] = 66
a[8] = 85
a[9] = 89
a[10] = 101
a[11] = 130
请输入要插入的数:96
重新排序
a[0] = 15
a[1] = 22
a[2] = 23
a[3] = 52
a[4] = 54
a[5] = 59
a[6] = 60
a[7] = 66
a[8] = 85
a[9] = 89
a[10] = 96
a[11] = 101
a[12] = 130
被插入数字的位置是:
arr[10] = 96

E:\Administrator\Documents\My C>
==================================================================================
  1. /*冒泡排序函数*/
  2. void mppx(int a[], int s)
  3. {
  4.     int i, j, t;
  5.     for (i = 0; i < s; i++)
  6.     {
  7.         for (j = 0; j < (s - 1); j++)
  8.         {
  9.             if (a[j] >= a[j + 1])
  10.             {
  11.                 t = a[j];
  12.                 a[j] = a[j + 1];
  13.                 a[j + 1] = t;
  14.             }
  15.         }
  16.     }
  17.     for (i = 0; i < s; i++)
  18.     {
  19.         printf("a[%d] = %d\n", i, a[i]);
  20.     }
  21. }
  22. /*数组搜索函数*/
  23. void arrsch(int arr[] , int n, int key)
  24. {
  25.     for (int i = 0; i < n; i++)
  26.     {
  27.         if (key == arr[i])
  28.         {
  29.             printf("被插入数字的位置是:\narr[%d] = %d\n", i, key);/*返回key在数组内的位置*/
  30.             break;
  31.         }
  32.     }
  33. }
复制代码
最佳答案
2019-5-23 12:50:17
忘了arrsch了
  1. /*在一个有序数组中插入一个数,插入后的数组仍然有序*/

  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <time.h>
  5. #include <string.h>

  6. /*冒泡排序函数*/
  7. void mppx(int data[], size_t size)
  8. {
  9.         for(size_t i = 0; i < size; ++i)
  10.         {
  11.                 for(size_t j = i; j < size; ++j)
  12.                 {
  13.                         if(data[i] > data[j])
  14.                         {
  15.                                 int temp = data[i];
  16.                                 data[i] = data[j];
  17.                                 data[j] = temp;
  18.                         }
  19.                 }
  20.         }
  21. }

  22. /*数组搜索函数*/
  23. int arrsch(int data[], size_t size, int key)
  24. {
  25.         for(size_t i = 0; i < size; ++i)
  26.         {
  27.                 if(data[i] == key)
  28.                         return i;
  29.         }
  30.         return -1;
  31. }

  32. void print(int data[], size_t size)
  33. {
  34.         for(size_t i = 0; i < size; ++i)
  35.                 printf("%d ", data[i]);
  36.         printf("\n");
  37. }

  38. int main(void)
  39. {
  40.         srand(time(NULL));

  41.         size_t size = rand() % 5 + 11;
  42.         int arr[size], barr[size + 1];
  43.         for(size_t i = 0; i < size; ++i)
  44.                 arr[i] = rand() % (size * size);

  45.         printf("排序前:"); print(arr, size);
  46.         mppx(arr, size);
  47.         printf("排序后:"); print(arr, size);

  48.         int key;
  49.         printf("请输入要插入的数:");
  50.         scanf("%d", &key);
  51.         memcpy(barr, arr, size * sizeof(arr[0]));
  52.         barr[size] = key;

  53.         printf("排序前:"); print(barr, size + 1);
  54.         mppx(barr, size + 1);
  55.         printf("排序后:"); print(barr, size + 1);

  56.         int index = arrsch(barr, size + 1, key);
  57.         if(index >= 0)
  58.                 printf("被插入数字的位置是:\nbarr[%d] = %d\n", index, key);

  59.         return 0;
  60. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-5-23 10:22:10 | 显示全部楼层
你给的代码没有用到指针呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-23 11:42:16 | 显示全部楼层
本帖最后由 bin554385863 于 2019-5-23 11:44 编辑
shake_a_tree@16 发表于 2019-5-23 10:22
你给的代码没有用到指针呀


那是因为我还没学到指针.

怕你们用了指针我看不懂

数组这一块我要弄透了才去学指针

还有就是我不明白为啥输出的是函数的参数数组名字
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-23 12:26:17 | 显示全部楼层
你要求把这个代码改的更简洁,你现在认为这个代码哪里不简洁?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-23 12:44:03 | 显示全部楼层
这样可以吗?
  1. /*在一个有序数组中插入一个数,插入后的数组仍然有序*/

  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <time.h>
  5. #include <string.h>

  6. void swap(int *a, int *b)
  7. {
  8.         int temp = *a;
  9.         *a = *b;
  10.         *b = temp;
  11. }

  12. /*冒泡排序函数*/
  13. void mppx(int data[], size_t size)
  14. {
  15.         for(size_t i = 0; i < size; ++i)
  16.         {
  17.                 for(size_t j = i; j < size; ++j)
  18.                 {
  19.                         if(data[i] > data[j])
  20.                                 swap(&data[i], &data[j]);
  21.                 }
  22.         }
  23. }

  24. /*数组搜索函数*/
  25. int arrsch(int data[], size_t size, int key)
  26. {
  27.         for(size_t i = 0; i < size; ++i)
  28.         {
  29.                 if(data[i] == key)
  30.                         return i;
  31.         }
  32.         return -1;
  33. }

  34. void print(int data[], size_t size)
  35. {
  36.         for(size_t i = 0; i < size; ++i)
  37.                 printf("%d ", data[i]);
  38.         printf("\n");
  39. }

  40. int main(void)
  41. {
  42.         srand(time(NULL));

  43.         size_t size = rand() % 5 + 11;
  44.         int arr[size], barr[size + 1];
  45.         for(size_t i = 0; i < size; ++i)
  46.                 arr[i] = rand() % (size * size);

  47.         printf("排序前:"); print(arr, size);
  48.         mppx(arr, size);
  49.         printf("排序后:"); print(arr, size);

  50.         int key;
  51.         printf("请输入要插入的数:");
  52.         scanf("%d", &key);
  53.         memcpy(barr, arr, size * sizeof(arr[0]));
  54.         barr[size] = key;

  55.         printf("排序前:"); print(barr, size + 1);
  56.         mppx(barr, size + 1);
  57.         printf("排序后:"); print(barr, size + 1);

  58.         return 0;
  59. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-23 12:45:42 | 显示全部楼层
哦,不能用指针,好吧
  1. /*在一个有序数组中插入一个数,插入后的数组仍然有序*/

  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <time.h>
  5. #include <string.h>

  6. /*冒泡排序函数*/
  7. void mppx(int data[], size_t size)
  8. {
  9.         for(size_t i = 0; i < size; ++i)
  10.         {
  11.                 for(size_t j = i; j < size; ++j)
  12.                 {
  13.                         if(data[i] > data[j])
  14.                         {
  15.                                 int temp = data[i];
  16.                                 data[i] = data[j];
  17.                                 data[j] = temp;
  18.                         }
  19.                 }
  20.         }
  21. }

  22. /*数组搜索函数*/
  23. int arrsch(int data[], size_t size, int key)
  24. {
  25.         for(size_t i = 0; i < size; ++i)
  26.         {
  27.                 if(data[i] == key)
  28.                         return i;
  29.         }
  30.         return -1;
  31. }

  32. void print(int data[], size_t size)
  33. {
  34.         for(size_t i = 0; i < size; ++i)
  35.                 printf("%d ", data[i]);
  36.         printf("\n");
  37. }

  38. int main(void)
  39. {
  40.         srand(time(NULL));

  41.         size_t size = rand() % 5 + 11;
  42.         int arr[size], barr[size + 1];
  43.         for(size_t i = 0; i < size; ++i)
  44.                 arr[i] = rand() % (size * size);

  45.         printf("排序前:"); print(arr, size);
  46.         mppx(arr, size);
  47.         printf("排序后:"); print(arr, size);

  48.         int key;
  49.         printf("请输入要插入的数:");
  50.         scanf("%d", &key);
  51.         memcpy(barr, arr, size * sizeof(arr[0]));
  52.         barr[size] = key;

  53.         printf("排序前:"); print(barr, size + 1);
  54.         mppx(barr, size + 1);
  55.         printf("排序后:"); print(barr, size + 1);

  56.         return 0;
  57. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-23 12:50:17 | 显示全部楼层    本楼为最佳答案   
忘了arrsch了
  1. /*在一个有序数组中插入一个数,插入后的数组仍然有序*/

  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <time.h>
  5. #include <string.h>

  6. /*冒泡排序函数*/
  7. void mppx(int data[], size_t size)
  8. {
  9.         for(size_t i = 0; i < size; ++i)
  10.         {
  11.                 for(size_t j = i; j < size; ++j)
  12.                 {
  13.                         if(data[i] > data[j])
  14.                         {
  15.                                 int temp = data[i];
  16.                                 data[i] = data[j];
  17.                                 data[j] = temp;
  18.                         }
  19.                 }
  20.         }
  21. }

  22. /*数组搜索函数*/
  23. int arrsch(int data[], size_t size, int key)
  24. {
  25.         for(size_t i = 0; i < size; ++i)
  26.         {
  27.                 if(data[i] == key)
  28.                         return i;
  29.         }
  30.         return -1;
  31. }

  32. void print(int data[], size_t size)
  33. {
  34.         for(size_t i = 0; i < size; ++i)
  35.                 printf("%d ", data[i]);
  36.         printf("\n");
  37. }

  38. int main(void)
  39. {
  40.         srand(time(NULL));

  41.         size_t size = rand() % 5 + 11;
  42.         int arr[size], barr[size + 1];
  43.         for(size_t i = 0; i < size; ++i)
  44.                 arr[i] = rand() % (size * size);

  45.         printf("排序前:"); print(arr, size);
  46.         mppx(arr, size);
  47.         printf("排序后:"); print(arr, size);

  48.         int key;
  49.         printf("请输入要插入的数:");
  50.         scanf("%d", &key);
  51.         memcpy(barr, arr, size * sizeof(arr[0]));
  52.         barr[size] = key;

  53.         printf("排序前:"); print(barr, size + 1);
  54.         mppx(barr, size + 1);
  55.         printf("排序后:"); print(barr, size + 1);

  56.         int index = arrsch(barr, size + 1, key);
  57.         if(index >= 0)
  58.                 printf("被插入数字的位置是:\nbarr[%d] = %d\n", index, key);

  59.         return 0;
  60. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-23 19:27:40 | 显示全部楼层

多谢,感觉数组不弄懂,实在没信心去弄懂指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 20:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表