用选择法对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三、参考程序
#include <stdio.h>四、运行测试
请输入10个数:确定对了?
追答#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");
}
确定对了
这是选择法吗?
运行结果也不对
#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做的,没改过来,用的是冒泡排序
我要的是选择法,这好像是冒泡吧