C语言:请编写程序将数56, 3, 45, 2, 9, 5, 4, 8, 13, 7, 6分别按从大到小和从小到大输出.

C语言:请编写程序将数56, 3, 45, 2, 9, 5, 4, 8, 13, 7, 6分别按从大到小和从小到大输出.

先用自然语言描述算法思想,然后编程实现。

自然语言就是简单的冒泡法

#include <opencv2/core/core.hpp>
#include <opencv2/features2d/features2d.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
void sort1(int a[11])//冒泡法排序
{
    int i,j,temp;
    for (i=0;i<10;i++)
    {
        for (j=i+1;j<11;j++)
        {
            if (a[i]>a[j])
            {
                temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
        }
    }
}
void main()
{
    int a[11]={56, 3, 45, 2, 9, 5, 4, 8, 13, 7, 6};
    int i,j;
    printf("before sorting:\n");
    for (i=0;i<11;i++)
    {
        printf("%d ",a[i]);
    }
    printf("\nafter sorting,small->big\n");
    sort1(a);
    for (i=0;i<11;i++)
    {
        printf("%d ",a[i]);
    }
    printf("\nafter sorting,big->samll\n");
    for (i=10;i>=0;i--)
    {
        printf("%d ",a[i]);
    }
    printf("\n");
    system("pause");
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-25
#include <stdio.h>
int main()
{
int a[100]={0},n,i;
while(scanf("%d",&n)!=EOF)
a[n]=1;
for(i=0;i<100;i++)
if(a[i])
printf("%d ",i);
printf("\n");
for(i=99;i>=0;i--)
if(a[i])
printf("%d ",i);
printf("\n");
return 0;
}


把数字存进数组,并标记,然后顺序或者逆序访问,有被标记数输出。这里用用输入函数了,你也可以直接在程序内处理这些数。

本回答被提问者采纳
第2个回答  2013-06-25
程序如下,思路是对于由小到大排列,将第一个数依次与后面每一个数比较,如果大于后一个数,就发生交换位置,这样不断循环就排出来了。对于由大到小排列同上一样的思路,只是把小的数往后移动了。程序如下
#include<stdio.h>
void sort1(int *a, int n)
{
int t;
for (int i = 0; i < n; i++)
{
for (int j = i + 1; j < n; j++)
{
if (*(a + i) > *(a + j))
{
t = *(a + i);
*(a + i) = *(a + j);
*(a + j) = t;
}
}
}
}

void sort2(int *a, int n)
{
int t;
for (int i = 0; i < n; i++)
{
for (int j = i + 1; j < n; j++)
{
if (*(a + i) < *(a + j))
{
t = *(a + i);
*(a + i) = *(a + j);
*(a + j) = t;
}
}
}
}

void output1(int *a, int n)
{
printf("排列如下:");
for (int i = 0; i < n; i++)
printf("%d ", *(a + i));
printf("\n");
}

void output2(int *a, int n)
{
printf("排列如下:");
for (int i = 0; i < n; i++)
printf("%d ", *(a + i));
printf("\n");
}

int main()
{
int a[11] = { 56, 3, 45, 2, 9, 5, 4, 8, 13, 7, 6 };
sort1(a, 11);
output1(a, 11);
sort2(a, 11);
output2(a, 11);
return 0;
}祝你愉快!
第3个回答  2013-06-25
从大到小排序:

先假定第一个数是最大的,后面的数依次跟它比,如果比它大,则交换。

一轮比好,再假定第二个数十最大的,后面的数依次跟它比,如果比它大,则交换。

依次类推,直到剩最后一个数。

从小到大排序则假设第一个是最小的,后面的数依次跟它比,如果比它小,则交换。

一轮比好,再假定第二个数十最小的,后面的数依次跟它比,如果比它小,则交换。

依次类推,直到剩最后一个数。

这里值举一个从大到小的排序:
#include<stdio.h>
#include<stdlib.h>

void sort_big(int *source,int n)
{
int i;
int j;
int t;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(source[j] > source[i])
{
t = source[i];
source[i] = source[j];
source[j] = t;
}
}
}
}

void display(int *source,int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%d,",source[i]);
}
}

void main(void)
{
int a[11] = {56, 3, 45, 2, 9, 5, 4, 8, 13, 7, 6};
sort_big(a,11);
display(a,11);
}
第4个回答  2013-06-25
#include"stdio.h"
void main()
{
int t;
int a[11]={56,3,45,2,9,5,4,8,13,7,6};
//选择排序法
for(int i=0;i<10;i++)
for(int j=i+1;j<11;j++)
{
if(a[i]<a[j]) //若存在更大的数则交换
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
for(i=0;i<11;i++)
printf("%d ",a[i]);
}

相似回答