用Java玩转算法(2)---选择排序

    选择排序(Select Sort)的思想是,在比较开始前将最小值假定为第一个数,在每轮循环的比较中找出最小的那个数,将其放到数组的前面。 

Java代码:

public class SelectSort {
	public static void main(String[] args) {
		int[] array = {7,5,3,8,4,1,3,61,13,31,11,3};
		System.out.println("选择排序前:");
		for(int arr:array){
			System.out.print(arr+" ");
		}
		
		//为选择排序定义一个最小值的索引minIndex=0,即第一个数
		int minIndex = 0;
		 for(int i = 0; i <array.length ;i ++){
			 //从第二个数开始判断,将最小数的索引记录下来,因为前者的已经排序好了
			 for(int j = i + 1;j < array.length;j ++){
				 //如果其他的数小于第一个数,那么将这个数的索引和值记录下来
				 if(array[j] < array[minIndex]){
					 //将最小数的索引j赋值给minIndex
					 minIndex = j;
				 }
			 }
			 //将最小数和第1个数交换(第2、3、4、、、)
			 int temp = array[minIndex];
			 array[minIndex] = array[i];
			 array[i] = temp;
			 //将最小数的索引假定为第i+1个
			 minIndex = i + 1;
		 }
			//输出选择排序的结果
				System.out.println("\n"+"选择排序的结果为:");
				for(int arr:array){
					System.out.print(arr+" ");
				}
	}	
}

结果:


动画演示:

https://www.cs.usfca.edu/~galles/visualization/ComparisonSort.html


思考:

1、选择排序和冒泡排序的时间复杂度都为O(N^2),但是没一轮循环只需要交换一个数,而冒泡排序在每一轮循环都要交换至少一个数,所以选择排序在时间上会优于冒泡排序。

2、选择排序需要指定第1个数为最小数,在循环完后,将第一个数与真正的最小数交换,第二轮循环要假设第2个数为最小数,而不是第1个数为最小数,因为已经判断完了,第1个数一定是最小数了,接下来的循环也同理,每次循环前要将最小数的索引往后推移一位。






猜你喜欢

转载自blog.csdn.net/pbrlovejava/article/details/80794732