#includestdio.h
void main()
{
int b[M],i,j,t,k;
for(i=0;iM;i++)
scanf("%d",b[i]);
for(i=0;iM-1;i++)
for(k=i,j=i+1;jM;j++)
if(b[k]b[j])
k=j;
if(i!=k)
t=b[i];
b[i]=b[k];
b[k]=t;
}
printf("%d ",b[i]);
错在大括号位置加错了.
扩展资料:
C语言选择排序详解
工作原理是每一次从无序组的数据元素中选出最小(或最大)的一个元素,存放在无序组的起始位置,无序组元素减少,有序组元素增加,直到全部待排序的数据元素排完.
以升序为例的图解:
代码:
void SelectionSort(int *num,int n)
int i = 0;
int min = 0;
int j = 0;
int tmp = 0;
for(i = 0;i n-1;i++)
min = i;//每次讲min置成无序组起始位置元素下标
for(j = i;j n;j++)//遍历无序组,找到最小元素.
if(num[min]num[j])
min = j;
if(min != i)//如果最小元素不是无序组起始位置元素,则与起始元素交换位置
tmp = num[min];
num[min] = num[i];
num[i] = tmp;
(此处空一行)
int main()
printf("%d ",num[i]);
return 0;
这是选择排序.先用a[0]与a[1]比较,当a[0]a[1]时并不交换,而用k记下来现在a[0]最小......这样一趟比较完后a[k]就是整个数组中最小的元素,把它与a[0]交换;第二趟,从a[1]开始重复前面的操作,那么最后a[1]就是剩下的n-1个元素中最小的......看a[0]、a[1]已经由小到大排好了,当做完n-1趟时不就把整个数组都排好了吗?注意:t=array[k];array[k]=array[i];array[i]=t;不是for(j=i+1;jn;j++)的循环体,要等它循环完了后才执行一次.
void?selectionsort(int?a[],int?m)
int?i,j;
int?k;
int?tmp;
for(i?=?0;?i?m-1;?i++)//控制循环次数,n个数需要n-1次循环
k?=?i;
for(j?=?i+1;?j?m?;?j++)
if(a[j]?a[k])
k?=?j;
//i不等于k是就证明a[i]不是最小的,
//i等于k时证明a[i]就是本轮比较过程中最小的值
if(i?!=?k)
tmp?=?a[i];
a[i]?=?a[k];
a[k]?=?tmp;
c语言通过函数调用实现选择排序法:
①.、写一个简单选择排序法的函数名,包含参数.int SelectSort(int * ListData,int ListLength);
int SelectSort(int * ListData,int ListLength)
int i , j ;
int length = ListLength;
int k = i;
for(j=i+1;j=length-1;j++)
if(ListData[k]ListData[j])
if(k!=i)
int tmp = ListData[i];
ListData[i] = ListData[k];
ListData[k] = tmp;
printf("排序之前的结果\n");
printf("|%d|",TestData[i]);
printf("排序之后的结果:\n");
选择排序(Selection sort)是一种简单直观的排序算法.工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完.
以下是一个实现选择排序的例子:
#define?SWAP(x,?y,?t)?((t)?=?(x),?(x)?=?(y),?(y)?=?(t))
//将list中的n个数据,通过选择排序算法排序.
void?selete_sort(int?list[],?int?n)
int?i,?j,?min,?temp;
for?(i?=?0;?i?n?-?1;?i++){
min?=?i;
for?(j?=?i?+?1;?j?n;?j++)//找出最小元素的下标.
if?(list[j]?list[min])
min?=?j;
SWAP(list[i],?list[min],?temp);//交换最小元素到当前起始位置.
以上就是土嘎嘎小编为大家整理的函数选择排序算法c语言相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!