bin554385863 发表于 2019-5-22 23:09:35

在一个有序数组中插入一个数,插入后的数组仍然有序

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

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

      barr = arr;

      barr = key;
    }
    printf("重新排序\n");
    mppx(barr, n + 1);
    //找出key的位置
    arrsch(barr, n + 1, key); //自定义数组元素搜索函数
}
-----------------------------------------------------------------------------------------------------------------------------
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 = 15
a = 22
a = 23
a = 52
a = 54
a = 59
a = 60
a = 66
a = 85
a = 89
a = 101
a = 130
请输入要插入的数:96
重新排序
a = 15
a = 22
a = 23
a = 52
a = 54
a = 59
a = 60
a = 66
a = 85
a = 89
a = 96
a = 101
a = 130
被插入数字的位置是:
arr = 96

E:\Administrator\Documents\My C>
==================================================================================
/*冒泡排序函数*/
void mppx(int a[], int s)
{
    int i, j, t;
    for (i = 0; i < s; i++)
    {
      for (j = 0; j < (s - 1); j++)
      {
            if (a >= a)
            {
                t = a;
                a = a;
                a = t;
            }
      }
    }
    for (i = 0; i < s; i++)
    {
      printf("a[%d] = %d\n", i, a);
    }
}
/*数组搜索函数*/
void arrsch(int arr[] , int n, int key)
{
    for (int i = 0; i < n; i++)
    {
      if (key == arr)
      {
            printf("被插入数字的位置是:\narr[%d] = %d\n", i, key);/*返回key在数组内的位置*/
            break;
      }
    }
}

shake_a_tree@16 发表于 2019-5-23 10:22:10

你给的代码没有用到指针呀

bin554385863 发表于 2019-5-23 11:42:16

本帖最后由 bin554385863 于 2019-5-23 11:44 编辑

shake_a_tree@16 发表于 2019-5-23 10:22
你给的代码没有用到指针呀

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

怕你们用了指针我看不懂{:9_220:}

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

还有就是我不明白为啥输出的是函数的参数数组名字

人造人 发表于 2019-5-23 12:26:17

你要求把这个代码改的更简洁,你现在认为这个代码哪里不简洁?

人造人 发表于 2019-5-23 12:44:03

这样可以吗?
/*在一个有序数组中插入一个数,插入后的数组仍然有序*/

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

void swap(int *a, int *b)
{
        int temp = *a;
        *a = *b;
        *b = temp;
}

/*冒泡排序函数*/
void mppx(int data[], size_t size)
{
        for(size_t i = 0; i < size; ++i)
        {
                for(size_t j = i; j < size; ++j)
                {
                        if(data > data)
                                swap(&data, &data);
                }
        }
}

/*数组搜索函数*/
int arrsch(int data[], size_t size, int key)
{
        for(size_t i = 0; i < size; ++i)
        {
                if(data == key)
                        return i;
        }
        return -1;
}

void print(int data[], size_t size)
{
        for(size_t i = 0; i < size; ++i)
                printf("%d ", data);
        printf("\n");
}

int main(void)
{
        srand(time(NULL));

        size_t size = rand() % 5 + 11;
        int arr, barr;
        for(size_t i = 0; i < size; ++i)
                arr = rand() % (size * size);

        printf("排序前:"); print(arr, size);
        mppx(arr, size);
        printf("排序后:"); print(arr, size);

        int key;
        printf("请输入要插入的数:");
        scanf("%d", &key);
        memcpy(barr, arr, size * sizeof(arr));
        barr = key;

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

        return 0;
}

人造人 发表于 2019-5-23 12:45:42

哦,不能用指针,好吧
/*在一个有序数组中插入一个数,插入后的数组仍然有序*/

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

/*冒泡排序函数*/
void mppx(int data[], size_t size)
{
        for(size_t i = 0; i < size; ++i)
        {
                for(size_t j = i; j < size; ++j)
                {
                        if(data > data)
                        {
                                int temp = data;
                                data = data;
                                data = temp;
                        }
                }
        }
}

/*数组搜索函数*/
int arrsch(int data[], size_t size, int key)
{
        for(size_t i = 0; i < size; ++i)
        {
                if(data == key)
                        return i;
        }
        return -1;
}

void print(int data[], size_t size)
{
        for(size_t i = 0; i < size; ++i)
                printf("%d ", data);
        printf("\n");
}

int main(void)
{
        srand(time(NULL));

        size_t size = rand() % 5 + 11;
        int arr, barr;
        for(size_t i = 0; i < size; ++i)
                arr = rand() % (size * size);

        printf("排序前:"); print(arr, size);
        mppx(arr, size);
        printf("排序后:"); print(arr, size);

        int key;
        printf("请输入要插入的数:");
        scanf("%d", &key);
        memcpy(barr, arr, size * sizeof(arr));
        barr = key;

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

        return 0;
}

人造人 发表于 2019-5-23 12:50:17

忘了arrsch了
/*在一个有序数组中插入一个数,插入后的数组仍然有序*/

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

/*冒泡排序函数*/
void mppx(int data[], size_t size)
{
        for(size_t i = 0; i < size; ++i)
        {
                for(size_t j = i; j < size; ++j)
                {
                        if(data > data)
                        {
                                int temp = data;
                                data = data;
                                data = temp;
                        }
                }
        }
}

/*数组搜索函数*/
int arrsch(int data[], size_t size, int key)
{
        for(size_t i = 0; i < size; ++i)
        {
                if(data == key)
                        return i;
        }
        return -1;
}

void print(int data[], size_t size)
{
        for(size_t i = 0; i < size; ++i)
                printf("%d ", data);
        printf("\n");
}

int main(void)
{
        srand(time(NULL));

        size_t size = rand() % 5 + 11;
        int arr, barr;
        for(size_t i = 0; i < size; ++i)
                arr = rand() % (size * size);

        printf("排序前:"); print(arr, size);
        mppx(arr, size);
        printf("排序后:"); print(arr, size);

        int key;
        printf("请输入要插入的数:");
        scanf("%d", &key);
        memcpy(barr, arr, size * sizeof(arr));
        barr = key;

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

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

        return 0;
}

bin554385863 发表于 2019-5-23 19:27:40

人造人 发表于 2019-5-23 12:50
忘了arrsch了

多谢,感觉数组不弄懂,实在没信心去弄懂指针{:5_109:}
页: [1]
查看完整版本: 在一个有序数组中插入一个数,插入后的数组仍然有序