一个C语言问题:用选择法对数组中十个数由小到大排序

来源:百度知道 编辑:UC知道 时间:2024/05/28 15:41:17
答案是这样的:
void sort(int array[],int n)
{int i,j,k,t;
for(i=0;i<n-1;i++)
{k=i;
for(j=i+1;j<n;j++)
if(array[j]<array[k])k=j;
t=array[k];array[k]=array[i];array[i]=t;}
}

我想知道,引入k的目的是什么?我研究了研究,不用 k好像也可以啊,不知道对不对

必须要k吧.
注意到k有两个地方被赋值,k=i和if(array[j]<array[k]) k=j,且if语句是放在for(j=i+1;j<n;j++)之后,说明k是用来存放10个数中最小数的位置,通过下面3句赋值语句把它放在最前,其他的以此类推.
选择法效率比较低,使用冒泡法应该更容易理解一些,且效率更高.

楼主你说的对!
这里k完全是画蛇添足。楼主你要相信自己,你把这个程序改写一下,就知道了。从你的问题发现你还需要大量的实践。要多自己写,哪怕是把书本上的程序原样输入电脑运行也好。只有这样你才会学会实际的编程技巧,理解一些看似简单但行之有效的细节问题,从而产生十足的信心。写一遍等于看五遍,光看不练是不行的。
以下是一个完整的选择排序的代码,就没用k.

/* 用选择排序法对一维整型数组中的十个数升序排序 程序在win-tc和Dev-c++下都调试通过*/
#include <stdio.h>
#include <stdlib.h>

int main()
{int i,j,a[10],temp;
printf("Please input 10 integers:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<9;i++) /* 选择法排序 */
for(j=i+1;j<10;j++)
if(a[i]>a[j])
{temp=a[i];/* 交换a[i]和a[j] */
a[i]=a[j];
a[j]=temp;
}
printf("The sequence after sort is:\n");
for(i=0;i<10;i++)
printf("%-5d",a[i]);
printf("\n");
sy