用选择法对10个整数从小到大排序

#includeint main(){ int i,j,n,a[10]; for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=0;i<n-1;i++) for(j=i;ja[j]) { n=a[i]; a[i]=a[j]; a[j]=a[i]; } for(i=0;i<10;i++) printf("%d\n",a[i]); return 0;}哪错了??不排序。。

用选择法对10个整数排序,用scanf输入。你用下面这种输入方法就可以了。

# include<stdio.h>

int main()

{

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

printf("enter data:\n");

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

{

printf("please enter ten numbers:\n");

scanf("%d",&a[i]); //输入10个数

}

printf("\n");

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

for (i=0;i<10;i++)   //在c语言中,数组的下标从0开始

printf("%5d",a[i]); //输出这10个数

printf("\n"); //以下8行是对这10个数排序

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

{min=i;

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

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

temp=a[i]; //以下3行将a[i+1]~a[10]中最小值与a[i]对换

a[i]=a[min];

a[min]=temp;

}

printf("\n The sorted numbers:\n"); //输出已排好序的10个数

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

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

printf("\n");

return 0;

}

扩展资料:

选择法排序基本思想:

每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。基于此思想的算法主要有简单选择排序、树型选择排序和堆排序

简单选择排序的基本思想:第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r交换;第2趟,在待排序记录r[2]~r[n]中选出最小的记录,将它与r[2]交换;以此类推,第i趟在待排序记录r[i]~r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕。

以下为简单选择排序的存储状态,其中大括号内为无序区,大括号外为有序序列:

初始序列:{49 27 65 97 76 12 38}

第1趟:12与49交换:12{27 65 97 76 49 38}

第2趟:27不动 :12 27{65 97 76 49 38}

第3趟:65与38交换:12 27 38{97 76 49 65}

第4趟:97与49交换:12 27 38 49{76 97 65}

第5趟:76与65交换:12 27 38 49 65{97 76}

第6趟:97与76交换:12 27 38 49 65 76 97 完成

参考资料:

百度百科- 用选择法对10个整数排序

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-10-20

错误处粗体标注如下:

#include//应为#include<stdio.h>

int main()

{

int i,j,n,a[10];//还需定义 int t;

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

scanf("%d",&a[i]);

//  n = 10, 既然下面用了i<n-1,应该定义n的值

for(i=0;i<n-1;i++)

for(j=i;ja[j])//应该为  for(j = i + 1;  j<n ; j ++)   if( a[i]>a[j])

{ n=a[i]; a[i]=a[j]; a[j]=a[i]; }//应该为{ t=a[i]; a[i]=a[j]; a[j]=t; }

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

printf("%d\n",a[i]);

return 0;

}

扩展资料:

选择排序法

选择排序法 是对 定位比较交换法(冒泡排序法) 的一种改进。

选择排序的基本思想是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。基于此思想的算法主要有简单选择排序、树型选择排序和堆排序。

简单选择排序的基本思想:第1趟,在待排序记录中选出最小的记录,将它与数组第2个数交换;第2趟,在待排序记录(即数组的其他数字)中选出最小的记录,将它与数组第3个数字交换;

以此类推,第i趟在待排序记录中选出最小的记录,将它与数组第i+1个数字交换,使有序序列不断增长直到全部排序完毕。

参考资料:百度百科-选择排序法

本回答被网友采纳
第2个回答  2013-11-27

#include<stdio.h>

int main()

{

 int i,j,n,t,a[10];

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

   scanf("%d",&a[i]);

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

 {

   n=i;

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

     if(a[j]<a[n])n=j;

   t=a[n]; a[n]=a[i]; a[i]=t;

 }

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

   printf("%d\n",a[i]);

 return 0;

}

本回答被提问者采纳
第3个回答  2020-09-19

选择法排序是一种简单的容易实现的对数据排序的算法。以整形数组元素为例,有数组A[10],即A[0],A[1],…,A[8],A[9](假设其元素均互不相同)。要求对其元素排序使之递增有序。

首先以一个元素为基准,从一个方向开始扫描,比如从左至右扫描,以A[0]为基准。
接下来从A[0],…,A[9]中找出最小的元素,将其与A[0]交换。



然后将基准位置右移一位,重复上面的动作,比如,以A[1]为基准,找出A[1]~A[9]中最小的,将其与A[1]交换。



一直进行到基准位置移到数组最后一个元素时排序结束(此时基准左边所有元素均递增有序,而基准为最后一个元素,故完成排序)。


main()
int array[10]; 

//给数组初始化!

int i,j,k,temp; 

for(i=0;i<10-1;i++) {

k=i; 

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

if (array[j]<array[k]) k="j" ;="" temp="array[k];array[k]=array;array=temp;" }="" }

第4个回答  2022-05-27

选择法排序,是最容易理解的。

写出程序,也是最简单的。

如下即是:

相似回答