关于选择排序的算法
我初学java  看到数组排序  关于选择排序的算法不是很理解求给看下 红色标记部分
public class select {
	public static void main(String[] args) {
		double[]list={3.21,5.6,8.6,74,9,98,76};
		System.out.println("初始数组 ");
	   for(int i=0;i<list.length;i++)
	   {
		   System.out.println(" "+list[i]);
	   }
	   selectionSorting(list);
	   System.out.println();
	   System.out.println("排序结束后的数组");
	   for(int i=0;i<list.length;i++)
	   {
		   System.out.println(" "+list[i]);
	   }
	
	}
	
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++) { //为什么j< list.length-i
				if(list[index]<list[j]) index=j;
				
			}
			if(index!=list.length-i-1)//这块也不是很明白
			{
				int m=list.length-i-1;
			   
				temp=list[m];
				list[m]=list[index];
				list[index]=temp;
				
			}
		}
	}
	}
	
	
------解决方案--------------------选择排序就是从前面选出最大的放到后面去。
list.length-i是分界点,前面是未排序的,后面是排序的
从0~list.length-i-1里面选出最大的,放到list.length-i-1
------解决方案--------------------第i趟循环,把最大值移到length-i-1位置,如下:
1:最大值移到最后一位,下次循环比较最后一值不参与
3.21,5.6,8.6,74,9,98,76==》3.21,5.6,8.6,74,9,76,98  
2:不算最后一位,最大值移到倒数第二位,下次比较后两位不参与
3.21,5.6,8.6,74,9,98,76==》3.21,5.6,8.6,74,9,76,98  
总体思路就是很一次循环记录“0到length-i-2”最大值,因为length-i-2以后的值已经有序
if(index!=list.length-i-1)//这块也不是很明白
这个判断当前比较的最后一位,如果不是最大值,就和最大值交换位置
------解决方案--------------------1.首先你这个选择排序是从后往前排,list[index]<list[j]这个是每次比较最大的,比如98放到最后一位,76放到最后第二位,那么后面已经排好了,就可以j< list.length-i
2.index!=list.length-i-1,这个是循环结束后,如果最大的值正好是当前要排序的位置,比如从后排到第三大的值,index正好是那个位置就不换,如果不是就交换位置
------解决方案--------------------首先,要明白 选择排序算法。
每次遍历,从数组中选择出当前无序集合中的最大(或者最小值)
楼主的原函数selectionSorting是每次遍历无序数组,选择出当前数组中的最大值,将最大数值,放在
无序数组的数组尾。
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++) { 
  
//初始化的无序数组长度为length,
  //i,因为从0计数,所以实际的选择次数为0,....(i-1) ,也就是i次。
  // 此时,无序集合长度 length-i,  有序集合长度为i.
  // 所以,j在无序集合中遍历,最大的index为 length-i-1.即 index < length-i
     if(list[index]<list[j]) 
        index=j;
    }
    if(index!=list.length-i-1)// 一次选择结束后,如果最大值,已经在当前无序集合的最后一个位置,则不需要再交换位置。 如果不在无序集合的末尾,那么交换到无序集合的末尾,也就是有序集合的头。(无序集合的最末端,即最大值,有序集合的最前端,即最小值)
    {
        int m=list.length-i-1; 
        temp=list[m];
	list[m]=list[index];