选择排序 -- java实现

版权声明:版权归JansonLin所有,转载请标明出处。 https://blog.csdn.net/Janson_Lin/article/details/84395128

原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕。也就是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。

简单选择排序的基本思想:给定数组:int[] arr={里面n个数据};第1趟排序,在待排序数据arr[1]~arr[n]中选出最小的数据,将它与arrr[1]交换;第2趟,在待排序数据arr[2]~arr[n]中选出最小的数据,将它与r[2]交换;以此类推,第i趟在待排序数据arr[i]~arr[n]中选出最小的数据,将它与r[i]交换,直到全部排序完成。
 

举例:

arr[] = {3,6,2,7,4,1}
--------------------------------------
第一趟: 1最小,与3交换位置  1,6,2,7,4,3
--------------------------------------
第二趟: 2最小,与6交换位置  1,2,6,7,4,3
--------------------------------------
第三趟: 3最小,与6交换位置  1,2,3,7,4,6
--------------------------------------
第四趟: 4最小,与7交换位置  1,2,3,4,7,6
--------------------------------------
第五趟: 6最小,与7交换位置  1,2,3,4,6,7
--------------------------------------

代码思路
分成两个循环:第一次循环选择的是数组遍历,第二次为未排序的数组遍历及比较。

代码实现

package cn.janson.sort;

public class SelectSort {
	
	public static void selectSort(int[] arr) {
		 //选择排序的优化
        for(int i = 0; i < arr.length - 1; i++) {// 做第i趟排序
            int k = i;
            for(int j = k + 1; j < arr.length; j++){// 选最小的记录
                if(arr[j] < arr[k]){ 
                    k = j; //记下目前找到的最小值所在的位置
                }
            }
            //在内层循环结束,也就是找到本轮循环的最小的数以后,再进行交换
            if(i != k){  //交换a[i]和a[k]
                int temp = arr[i];
                arr[i] = arr[k];
                arr[k] = temp;
            }    
        }
	}
	
	public static void main(String[] args) {
		int[] arr={3,6,2,7,4,1};
        System.out.println("交换之前:");
        for(int num:arr){
            System.out.print(num+" ");
        }
        selectSort(arr);
        System.out.println();
        System.out.println("交换后:");
        for(int num:arr){
            System.out.print(num+" ");
        }
	}
}

测试效果

交换之前:
3 6 2 7 4 1 
交换后:
1 2 3 4 6 7

猜你喜欢

转载自blog.csdn.net/Janson_Lin/article/details/84395128