其他分享
首页 > 其他分享> > C语言,0602P,选择排序法。

C语言,0602P,选择排序法。

作者:互联网

我遇到了一个很容易犯的错误。中间的值可能没有进行替换。

数组比大小的时候(从大到小排序),从第一个元素开始往后比的话,要考虑两种情况。

1,后一个元素大于前一个元素,就要把这两者的值进行交换。

2,如果是前一个元素大于后一个元素,就保持前一个元素的值不动,进行下一次的循环,这里就要用到另一个临时变量进行控着这个值不动。

#include<stdio.h>
int main()
{
	void sort(int array[],int n);//这里就是声明函数。
	int a[10],i;
	//printf("初始化数组\n");
	
    for(i=0;i<10;i++)
		scanf("%d",&a[i]);
	sort(a,10);//这里是调用函数。
	
    for(i=0;i<10;i++)
		printf("%5d",a[i]);
	printf("\n");
	return 0;
 } 
/*下面是定义函数,把它放到主函数的外面。然后再再主函数中声明这个函数的首部就可以用了。
  或者可以直接复制循环结构拿出用。
*/
void sort(int array[],int n)//这里的 n 代表数组的大小。
 {
 	int i,j,k,t;//这里的k用来临时替代数组元素。
 	for(i=0;i<n-1;i++)
 	{
 		k=i;
 		for(j=i+1;j<n;j++)
 		{
 			if(array[j]>array[k])
 				 					
			{
				k=j;
			}
		}	
    //后一个元素大于前一个元素就要把值赋给k,此时 k 不等于 i 就要进行前后两个元素的值替换。
    //如果上面的条件没满足,此时 k 是等于 i的,那么下面的条件也不满足,就要进行下一次循环。
		if(k!=i)
		{
						 
 		 t=array[k];
		 array[k]=array[i];
		 array[i]=t;
			 	
		}
	}
 }

这样就可以顺利进行排序,中间就不会出现没有被替换的情况。

标签:int,0602P,元素,C语言,就要,一个,array,排序
来源: https://blog.csdn.net/Lulu_qifei/article/details/121297813