日期:2014-05-20 浏览次数:20707 次
static void selectionSorting(double []list){ int index; double temp; for(int i=0;i<list.length;i++){ index=0;//开始选定某个元素(一般取第一个元素)作为比较对象 for(int j=0;j<list.length-i;j++){ //循环遍历比较,本例中大数被排到最后,所以list.length-1元素不用再比较 if(list[index]<list[j])index=j; //如果j元素大于index元素,重新设定index,也就是取j元素作为新的比较对象 if(index!=list.length-i-1){ //如果被比较元素的位置不是倒数大数的位置(因为每次大数都被排在后面,所以倒数list.lengt-i-i位置是新的倒数位置),则交换 int m=list.length-i-1; temp=list[m]; list[m]=list[index]; list[index]=temp; } } } } //给LZ一个直观一点的,每次把最小的数放在前面 static void selectionSorting(double []list){ int index; double temp; for(int i=0;i<list.length;i++){ index=i;//以第i个元素作为比较对象,因为i以前的位置是已经排好的数据了 for(int j=i+1;j<list.length;j++){ //从i+1位置循环遍历比较,看看能否找到比i小的数 if(list[index]>list[j])index=j; //如果j元素小于index元素,取j元素作为新的比较对象 if(index!=i){ //如果被比较元素的位置不是最开始的i位置,说明发生了j位置比i位置小的情况 temp=list[i]; list[i]=list[index]; list[index]=temp; } } } }
------解决方案--------------------
其实你只要弄清楚,选择排序就是两个循环的嵌套。每次内层循环都选择出剩下元素中最大的,然后一轮外层循环结束时就将该最大元素赋值给剩下元素中的第一号元素