C语言,用选择法对数组中10个整数按由小到大排序

原来:#include<stdio.h>intmain(){voidsort(intarry[],intn);inta[10],i;printf("enterarray:... 原来:#include<stdio.h>int main(){void sort(int arry[],int n);int a[10],i;printf("enter array:\n");for(i=0;i<10;i++)scanf("%d",&a[i]);sort(a,10);printf("the sorted array:\n");for(i=0;i<10;i++)printf("%d ",a[i]);printf("\n");return 0;}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;}}把(i和k的位置调换):printf("the sorted array:\n");for(i=0;i<10;i++)printf("%d ",a[i]);printf("\n");return 0;}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[i])i=j;t=array[i];array[i]=array[k];array[k]=t;}}在我理解看来,两者结果会是一样的,结果却不一样,恳请说说有什么区别呢??? 展开
 我来答
謇蕊郏冬梅
2019-07-13 · TA获得超过3839个赞
知道大有可为答主
回答量:3126
采纳率:29%
帮助的人:229万
展开全部
太奇葩了吧?再把k=i改成d=i,把if(array[j]<array[k])改成if(array[j]<array[d])看看行不行?前面用k作比较下标变量信息记录,突然冒出个与前面比较没有任何关系的d来肯定造成错误操作……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
夜独行孤单
2016-11-08 · TA获得超过3460个赞
知道大有可为答主
回答量:2803
采纳率:82%
帮助的人:637万
展开全部
int i , j ,min ;
for ( i = 0 ; i < n-1 ; i ++ )
{
min = i ;
for ( j = i ; j < n ; j ++ )
{
if (arr[j]<arr[min)
min = j ;
}
int temp = arr[ i ] ;
arr[ i ] = arr [ min ] ;
arr[ min ] = temp;
}
追问
int i , j ,min ;

for ( i = 0 ; i < n-1 ; i ++ )
{
min = i ;
for ( j = i ; j < n ; j ++ )
{
if (arr[j]<arr[i)
i = j ;
}
int temp = arr[min] ;
arr[ min] = arr [ i ] ;
arr[ i ] = temp;
}

对调一下min和i有什么不同呢?
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
White_MouseYBZ
推荐于2018-03-11 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6612万
展开全部
我都不知道说什么好!i是外循环计数变量,由它来安排后面的j循环从哪里开始,所以第i以前的都已经排好序了,这说明i只能一次增1来遍历数组。正因为如此,所以才安排一个临时变量k来记录第i以后的所有元素值中最小(或最大)值的下标,以不影响i按部就班地遍历整个数组(最后一个元素可以不包括,因为j是从i+1开始的;当然包括了也不错,只是多作一次循环判断罢了)。你倒好,还在循环体中对i进行干预!你以为k=i了两者就一样了?k=i只是在每一轮循环开始时让k的初值等于i(选择法算法要素之一),而两者的功能完全不同:i在当前一轮循环中不能改变,是要准备把i以后的元素中最小值拿来与i下标的元素比较看是否应该交换;而k是随i以后的元素值的大小而游走的,总是记录着i以后的元素中当前最小值(或最大值)的下标。你把i当k用,随时更改它的值,那外循环还能正常进行吗?排序算法过程全是在外循环正确进程下才有保证,外循环被人为扰乱了,其中的算法还能正常?况且,外循环中还有i++!比如:当前i==5,那么正常时下一轮应该是i==6;可你内循环把i当临时变量k使,倘若array[9]是最小的,那么i立马被赋值为9了,……进程退到外循环由于i++的作用i就是10了,那么i<n-1显然不成立了,外循环就此结束,6、7、8、9这几个下标的元素就失去了参与排序的机会!看代码首先要理解代码思想,再研究怎么用C的合法语句体现这种思想,所以必须把一个功能模块整体观察……
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式