编写C语言程序,把一个数组按从小到大的次序排列起来

编写要求:
(1)从键盘输入10个整数,储存在长度为10的数组中
(2)使用冒泡排序法或选择排序法,对该数组按从小到大的顺序排列
(3)输出排序后数组的所有元素。
感谢各位大佬!

源程序以及算法注释如下:

#define _CRT_SECURE_NO_WARNINGS//VS编译环境需要进行宏定义,VC6.0可忽略

#include<stdio.h>//输入输出头文件

int main()

{

int number[10], New_number[10];//定义数组的数据类型为整型

int i, j, m, n, k;//定义变量的数据类型为整型

printf("input 10 <int> number:");//文字提示

for (i = 0; i <= 9; i++)//用循环输入数值给数组number并赋给数组New_number

{

scanf("%d", &number[i]);//输入10个整形数字到数组中

New_number[i] = number[i];//数组number元素赋给数组New_number

}

for (n = 0; n <= 8; n++)//要进行(10-1)组比较

for (j = 0; j <= 8 - n; j++)//每组进行(10减第几组)次比较

{

if (number[j] > number[j + 1])//比较大小并将小的赋给前面的数组

{

k = number[j];//将相对较大的元素赋值给中间元素

number[j] = number[j + 1];//将相对较小的元素送达前面一个位置

number[j + 1] = k;//将中间变量元素送给后面一个位置

}

if (New_number[j] < New_number[j + 1])//比较大小并将大的赋给前面的数组

{

k = New_number[j + 1];//将相对较小的元素赋值给中间元素

New_number[j + 1] = New_number[j];//将相对较大的元素送达前面一个位置

New_number[j] = k;//将中间变量元素送给后面一个位置

}

}

printf("min-->max:\n");//文字提示

for (m = 0; m <= 9; m++)//依次从小到大输出

printf("%d ", number[m]);//输出元素

printf("\n");

printf("max-->min:\n");//文字提示

for (m = 0; m <= 9; m++)//依次从大到小输出

printf("%d ", New_number[m]);//输出元素

printf("\n");

return 0;

}

程序运行结果如下:



扩展资料:

其他简单实现程序:

#include<stdio.h>

int main()

{

int a[10]={0};

int i,j,temp;

for(i = 0;i<10;i++)

{

scanf("%d",&a[i]);

}

for(i = 0;i<10;i++)

{

for(j = 0;j<10-i-1;j++)

{

if(a[j]>a[j+1])

{

temp = a[j];

a[j] = a[j+1];

a[j+1] = temp;

}

}

}

for(i = 0;i<10;i++)

printf("%d ",a[i]);

return 0;

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-07-16
选择法
#include<stdio.h>
main()
{int a[8] = { 1,25,44,74,55,89,84,44 };
int i,j,temp;
for(i=0;i<7;i++)
for(j=i+1;j<8;j++)
if(a[i]<a[j]) //改成大于号从高到低排序
{temp=a[i];a[i]=a[j];a[j]=temp;}
for(i=0;i<8;i++)
printf("%d ", a[i]);
}
起泡法
#include "stdio.h"
main()
{
int i,j,a[10];int temp,*k,*p;
printf("输入10个整数\n");
for(p=a; p-a<10; p++)
scanf("%d",p);
for(j=0;j<9;j++)
{
for(p=a,k=(a+1),i=0;i<9-j;i++) //起泡法排序p指向a,k指向a+1
if(*(p+i)>*(k+i))
{temp=*(p+i);*(p+i)=*(k+i);*(k+i)=temp;}
}
p=a;
printf("最小%d 最大%d\n",*p,*(p+9));
for(p=a;p-a<10;p++) //输出排序后的10个数
printf("%d ",*p);
}
#include "stdio.h"
main()
{
void fun(int *p);
int i,a[10];
printf("输入10个整数\n");
for(i=0;i<10; i++)
scanf("%d",a+i);
fun(a);
}
void fun(int *p)
{
int i,j,*k,*q,temp;
for(j=0;j<9;j++)
for(k=(p+1),i=0;i<9-j;i++) //起泡法排序p指向a,k指向a+1
if(*(p+i)>*(k+i))
{temp=*(p+i);*(p+i)=*(k+i);*(k+i)=temp;}
printf("最小%d 二大%d\n",*p,*(p+8));
for(i=0;i<10;i++)
printf("%d ",*p++); //移动指针p
}
#include<stdio.h>
void sort(int *a,int n)
{
int i,j,t;
for(j=0;j<n;j++)
for(i=0;i<n-1-j;i++)
if(a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
main()
{int a[10];
int i,j,t;
printf("input 10 numbers:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("\n");
sort(a,10);
printf("the sorted numbers:\n");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
}
第2个回答  2017-05-13
#include <stdio.h>

int* BubbleSort(int* ary, int length)
{
    int i, j, tmp;
    for(i=0; i<length-1; i++)
    {
        tmp = ary[i];
        
        for(j=length-1; j>i; j--)
        {
            //find the smallest number in current loop
            if(tmp > ary[j])
            {
                ary[i] = ary[j];
                ary[j] = tmp;
                tmp = ary[i];
            }
        }
    }

    return ary;
}

追问

你好,这个显示的是什么错误?程序无法编译。能不能麻烦再看一下,谢谢!

追答

我猜你是main函数写的有点问题,我顺便给你补了一个main函数

本回答被提问者和网友采纳
第3个回答  2017-05-13
简单,留邮箱我写一个发你参考
第4个回答  2017-05-13
语言程序,
相似回答