这是一道java题目,为什么输出是5 6 7 8 9.循环的执行过程是怎么样的?

如题所述

int a[] = {5,9,6,8,7};
 int i,j;
 for(i = 0;i<a.length-1;i++){//1层循环取元素
 int k = i;
 for(j=i;j<a.length;j++){//二层循环,取剩余部分(除去前一个元素)
 if(a[j]<a[k]){//如果前一个元素<后面的元素
 k=j;//交换下标
 }
 }
 //冒泡排序 主题思想就是临时变量temp永远代表最小的值,然后将这个最小值赋给下标较小的
 int temp = a[i];
 a[i] = a[k];
 a[k]= temp;
 }
 for(i=0;i<a.length;i++){
 System.out.println(a[i] + " ");
 }
 System.out.println();
 }

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-01-20
冒泡法排序,外层就是循环a数组中元素,而内层循环每次循环会减少一个,因为内层循环循环完后会记录数组中最小的数的下标并赋给k,然后把数组中a[i]和a[k]进行交换,这样第一次外层循环结束第0个元素就是最小的,第二层循环结束第1个元素就是次小的直到全部循环结束
第2个回答  2015-01-20
第一个for循环已经将数组从小到大进行了排序,排序的思路就是循环拿第i个和i以后的元素去比较,如果小就说明后面的比前面的小,然后就把他们换一下位置追问

不懂啊。你看后面输出,还有第二个for循环。。。

追答

后面那个for循环就是把数组打印出来啊,这个你不懂?就是一个个输出而已,没什么东西……

追问

我说的是内层循环

第3个回答  2015-01-20
选择排序:
先找出从a[0]开始5个数中最小的一个,记录下标k,将最小的一个和a[0]元素交换,
再找出从a[1]开始剩余4个数中最小的一个,记录下标k,将最小的一个和a[1]交换,
再找出从a[2]开始剩余3个数中最小的一个,记录下标k,将最小的一个和a[2]交换,
再找出从a[3]开始剩余2个数中最小的一个,记录下标k,将最小的一个和a[3]交换,
还剩一个数他肯定就最大了,不需要交换。
相似回答