JAVA排序算法--选择排序

选择排序的思想是 先拿出数组里的第一个数a[0] 用后面的每一个数一次和它比较 如果发现有比a[0]大(我们以升序为例) 就记录这个数的下标lowerIndex 请注意 并没有交换两个数的位置 再继续往后遍历 用后面的数和a[lowerIndex]比较大小 同理 若比a[lowerIndex]小 就把这个数的下标赋值给lowerIndex 知道内层循环结束 即把整个数组中最小的数找到了 并放在了第一个位置 注意 这时候 其他数的位置并没有发生变化 然后跳出到外层循环 i++ 继续执行下一次遍历
以下是具体实现代码。。


/**  
 * JAVA排序算法--选择排序  
 *   
 * @author 千醉  JAVA新手菜鸟群 32413139  
 *   
 */   
public class Test {
	
  public static void SelectSort(int a[]) {
    int i, j, k; // 循环计数变量
    int lowerIndex; // 最小值索引变量
    int temp; // 暂存变量

    for (i = 0; i < a.length ; i++) {
      lowerIndex = i; // 储存最小数值的索引值
      for (j = i+1; j < a.length; j++) {
        if (a[j] < a[lowerIndex]) // 找到最小值  注意此处不是判断a[j]<a[i]
        lowerIndex = j ;
      }
	  if(i!=lowerIndex)//交换两数 即 把当前未排序的剩余数中把选择出来的最小的放到i的位置上
        {
        	temp = a[i] ;
        	a[i] = a[lowerIndex] ;
        	a[lowerIndex] = temp ;
        }
      System.out.print("排序中: ");
      for (k = 0; k < a.length; k++)
        System.out.printf("%3s", a[k]);
      System.out.println("");
    }
  }	

  public static void main(String args[]) {
  	int[] a = { 10, 32, 1, 9, 5, 7, 12, 0, 4, 3 }; // 预设数据数组
    int i; // 循环计数变量
    

    System.out.print("排序前: ");
    for (i = 0; i < a.length ; i++)
      System.out.printf("%3s", a[i]);
    System.out.println("");

    SelectSort(a); // 选择排序
    // 排序后结果
    System.out.print("排序后: ");
    for (i = 0; i < a.length ; i++)
      System.out.printf("%3s", a[i]);
    System.out.println("");
  }
}



运行结果:

排序前:  10 32  1  9  5  7 12  0  4  3
排序中:   0 32  1  9  5  7 12 10  4  3
排序中:   0  1 32  9  5  7 12 10  4  3
排序中:   0  1  3  9  5  7 12 10  4 32
排序中:   0  1  3  4  5  7 12 10  9 32
排序中:   0  1  3  4  5  7 12 10  9 32
排序中:   0  1  3  4  5  7 12 10  9 32
排序中:   0  1  3  4  5  7  9 10 12 32
排序中:   0  1  3  4  5  7  9 10 12 32
排序中:   0  1  3  4  5  7  9 10 12 32
排序中:   0  1  3  4  5  7  9 10 12 32
排序后:   0  1  3  4  5  7  9 10 12 32

你可能感兴趣的:(java,算法,J#)