用C语言编程:用选择法对10个整数排序,10个整数用scanf函数输入

用选择法

1、打开visual C++ 6.0,准备一个空白的c语言文件,引入头文件,在main函数中定义变量和数组:

2、接下来用scanf函数输入的10个数,将输入的数存入到变量a中,接着进行比较排序,如果后一个数比前一个数大则利用中间变量t实现俩值互换,最后输出排序的结果:

3、编译运行程序,输入任意的10个数,回车后即可看到排序后的结果。以上就是c语言中选择排序的用法:

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-05-08

用选择法对10个整数递增排序。10个整数用scanf函数输入

选择法:假设集合A有n个元素,按以下算法完成递增排序:

(1)\x05以一个元素为基准,从一个方向开始扫描,比如以A[0]为基准,从左至右扫描;

(2)\x05用A[0]右边的A[1]-A[n-1]与A[0]比较,找出最小的元素,将其与A[0]交换;

(3)\x05将基准位置右移一位,即移到A[1],重复(1)和(2)动作,比如,以A[1]为基准,找出A[1]-A[n-1]中最小的,将其与A[1]交换。一直进行到基准位置移到数组最后一个元素时排序结束(此时基准左边所有元素均递增有序,而基准为最后一个元素,故完成排序)。

#include<stdio.h>

void main()

{

int i,j,min,temp,a[11];

printf("enter data;\n");

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

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

scanf("%d",&a<i>);

}

printf("\n");

printf("The original numbers:\n");

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

printf("%5d",a<i>);

printf("\n");

for(i=1;i<=9;i++)

{min=i;

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

if(a[min]>a[j])min=j;

temp=a<i>;

a<i>=a[min];

a[min]=temp;

}

printf("\nThe sored numbers;\n");

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

printf("%5d",a<i>);

printf("\n");

}

扩展资料:

选择排序每次找出所剩元素中最小(大)的值

void selectionSort(int arr[],int n)

{

for(int i=0;i<n;i++){

//寻找[i,n)区间的最小值

int minIndex=i;

for(int j=i+1;j<n;j++)

if(arr[j]<arr[minIndex])

minIndex=j;

swap(arr<i>,arr[minIndex]);

}

}

参考资料

百度百科——算法

本回答被网友采纳
第2个回答  2017-06-25

一、算法思想

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据有序。

选择排序的基本思想是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。选择排序有简单选择排序、堆排序等多种算法。下面的分析、操作、程序均以简单选择排序算法为例进行讲解。


二、操作过程

初始状态:    (49)  38  65  97  76  13  27  49  32  13
第1趟:        i                    k
              13  (38)  65  97  76  49  27  49  32  13
第2趟:            i                                k
              13  13  (65)  97  76  49  27  49  32  38
第3趟:                i                k
              13  13  27  (97)  76  49  65  49  32  38    
第4趟:                    i                    k
              13  13  27  32  (76)  49  65  49  97  38    
第5趟:                        i                    k          
              13  13  27  32  38  (49)  65  49  97  76    
第6趟:                            i,k                
              13  13  27  32  38  49  (65)  49  97  76    
第7趟:                                i    k                
              13  13  27  32  38  49  49  (65)  97  76    
第8趟:                                    i,k 
              13  13  27  32  38  49  49  65  (97)  76    
第9趟:                                        i    k
              13  13  27  32  38  49  49  65  76  97


三、参考程序

#include <stdio.h>

#define MAX 10

/* 从键盘输入n个数,保存在数组中 */
void input(int arr[], int n);

/* 使用简单选择排序对数组中的元素按非递减有序排列 */
void sort(int arr[], int n);

/* 输出数组中的所有元素 */
void display(int arr[], int n);

int main()
{
int arr[MAX];

printf("请输入%d个数:\n", MAX);
input(arr, MAX);

printf("排序前:\n");
display(arr, MAX);

sort(arr, MAX);


printf("排序后:\n");
display(arr, MAX);

return 0;
}

/* 从键盘输入n个数,保存在数组中 */
void input(int arr[], int n)
{
int i;

for(i=0; i<n; i++)
{
scanf("%d", &arr[i]);
}
}

/* 使用简单选择排序对数组中的元素按非递减有序排列 */
void sort(int arr[], int n)
{
int i, j, k;
int temp;

for(i=0; i<n-1; i++)
{
k = i;
for(j=i+1; j<n; j++)
{
if(arr[j] < arr[k])
{
k = j;
}
}

if(k != i)
{
temp = arr[k];
arr[k] =arr[i];
arr[i] = temp;
}
}
}

/* 输出数组中的所有元素 */
void display(int arr[], int n)
{
int i;
for(i=0; i<n; i++)
{
printf("%d  ", arr[i]);
}
printf("\n");
}


四、运行测试

请输入10个数:
49 38 65 97 76 13 27 49 32 13
排序前:
49  38  65  97  76  13  27  49  32  13
排序后:
13  13  27  32  38  49  49  65  76  97

第3个回答  推荐于2017-10-08
#include<stdio.h>
void main()
{
int i[10],a=0,b=0,temp,k;
printf("请输入十个整数:");
for(;a<10;a++)
scanf("%d",&i[a]);
for(a=0;a<9;a++)
{
k=a;
for(b=1;b<10-a;b++)
{ if(i[b]>i[k])
{k=b;}
}
if(k!=a)
{temp=i[a];i[a]=i[k];i[k]=temp; }
}

printf("从小到大排序:");
for(a=0;a<10;a++)
printf("%d\t",i[a]);
printf("\n");
}追问

确定对了?

追答

#include
int main()
{
int i[10],a=0,b=0,temp,k;
printf("请输入十个整数:");
for(;ai[k])
{k=b;}
}
if(k!=a)
{temp=i[a];i[a]=i[k];i[k]=temp; }
}

printf("从小到大排序:");
for(a=0;a<10;a++)
printf("%d\t",i[a]);
printf("\n");
}

确定对了

本回答被提问者采纳
第4个回答  2011-05-06
#include<stdio.h>
void main()
{
int i[5],a=0,b=0,temp;
printf("请输入十个整数:");
for(;a<5;a++)
scanf("%d",&i[a]);
for(a=1;a<10;a++)
{
for(b=0;b<10-a;b++)
{
if(i[b]>i[b+1])
{
temp = i[b];
i[b] = i[b+1];
i[b+1] = temp;
}
}
}

printf("从小到大排序:");
for(a=0;a<10;a++)
printf("%d\t",i[a]);
printf("\n");
}追问

这是选择法吗?
运行结果也不对

追答

#include
void main()
{
int i[10],a=0,b=0,temp;
printf("请输入十个整数:");
for(;ai[b+1])
{
temp = i[b];
i[b] = i[b+1];
i[b+1] = temp;
}
}
}

printf("从小到大排序:");
for(a=0;a<10;a++)
printf("%d\t",i[a]);
printf("\n");
}

不好意思啊,刚开始使用长度为5做的,没改过来,用的是冒泡排序

追问

我要的是选择法,这好像是冒泡吧

相似回答