用选择法对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]);
}
}
参考资料
一、算法思想
选择排序(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
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");
}
确定对了
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做的,没改过来,用的是冒泡排序