注册 登录
编程论坛 C语言论坛

请问大佬,这个冒泡排序可以改成其他的排序方法吗?

木偶人丶 发布于 2019-10-24 23:11, 1540 次点击
只有本站会员才能查看附件,请 登录

程序代码:
#include<stdio.h>
#include<stdlib.h>

int main()
{
    int *p,n,i,j,end,num,temp1,temp2;
    scanf("%d",&n);
    p = (int *) malloc((n+1)*sizeof(int)) ;
    for(i=0;i<n;i++)
    {
        scanf("%d",p+i);
    }
    scanf("%d",&num);
    if(num>=p[n-1]){
        p[n] = num;
    } else
    {
        for(i=0;i<n+1;i++)
        {
            if(num<p[i])
            {
                temp1 = p[i];
                p[i] = num;
            for(j=i+1;j<n+1;j++)
            {
                temp2 = p[j];
                p[j] = temp1;
                temp1 = temp2;
            }
            break;
            }
        }
    }
    for(i=0;i<n+1;i++)
    {
        printf("%d,",p[i]);
    }
    return 0;
}
5 回复
#2
木偶人丶2019-10-24 23:25
或者可以更好的完善这个这个程序?
#3
rjsp2019-10-25 09:05
这个冒泡排序
哪来的排序?题目中没要求排序,你的代码中也没有排序。
#4
纯蓝之刃2019-10-25 12:50
程序代码:
#include<stdio.h>
#include<stdlib.h>

int main()
{
    int *p,n,i,j,end,num,temp1,temp2;
    printf("请输入序列表长度:");
    scanf("%d",&n);
    p = (int *) malloc((n+1)*sizeof(int)) ;
    printf("请输入递增有序序数列:");
    for(i=0;i<n;i++)
    {
        scanf("%d",p+i);
    }
    while(1)
    {
        printf("请输入要插入的数据:");
        scanf("%d",&num);
        n++;
        p = (int *) realloc(p,(n+1)*sizeof(int)) ;
        if(num>=p[n-2])
        {
            p[n-1] = num;
        }
        else
        {
            for(i=n-2;i>=0;i--)
            {
                if(num>p[i])
                {
                    p[i+1] = num;
                    break;
                }
                else
                {
                    p[i+1]=p[i];
                }
            }
        }
        for(i=0;i<n;i++)
        {
            printf("%d,",p[i]);
        }
    }
    return 0;
}

p = (int *) realloc(p,(n+1)*sizeof(int)) ;每次输入数据后,将分配的内存空间扩大一次
#5
木偶人丶2019-10-25 13:11
回复 4楼 纯蓝之刃
谢谢大佬,非常非常感谢
#6
木偶人丶2019-10-25 13:12
回复 3楼 rjsp
可能是我没表达好吧,但是还是很感谢版主给了我这个请教大佬的机会。
1