JAVA排序算法之选择排序

选择排序算法的思想:首先,找到数组中最小的那个元素,其次,将它和数组中的第一个元素交换位置(如果第一个元素就是最小的元素那么就和自己交换)。然后在剩下的元素中找到最小的元素,将它与数组中的第二个元素交换位置。依次类推,直到整个数组排序。源源不断的选择剩余数组中最小的元素

下面举个例子:例如数组int[] a = {5,9,4,2,7,3};

i为数组下标,min为数组中最小的元素下标

 i      min       0     1     2     3     4     5       (此为数组下标)

                     5     9     4     2     7     3       (数组元素)

0       3          5     9     4     2     7     3     (找到数组下标为3的元素最小,然后与i的位置交换)

1       5          2     9     4     5     7     3     (找到数组下标为5的元素最小,然后与i的位置交换)

2       2          2     3     4     5     7     9     (找到数组下标为2的元素最小,然后与i的位置交换,自己与自己交换)

3       3          2     3     4     5     7     9      (找到数组下标为3的元素最小,然后与i的位置交换,自己与自己交换)

4       4          2     3     4     5     7     9      (找到数组下标为3的元素最小,然后与i的位置交换,自己与自己交换)

5       5          2     3     4     5     7     9      (找到数组下标为3的元素最小,然后与i的位置交换,自己与自己交换)

//选择排序的事件复杂度为O(n^2)
	public static void selectSort(int[] arr) {
		for(int i = 0;i < arr.length-1;i++) {
			int min = arr[i];
			int minIndex = i;
			for(int j = i + 1;j < arr.length;j++) {
				if(min > arr[j]) {
					min = arr[j];
					minIndex = j;
				}		
			}
			//if(minIndex != i) {			//等于i说明没有进行交换
				arr[minIndex] = arr[i];
				arr[i] = min;
				
			//}
			System.out.println("第"+(i+1)+"轮比较后");
			System.out.println(Arrays.toString(arr));
		}
	}
	
	public static void main(String[] args) {
		//int[] arr = {101,34,119,1}; 
		int[] arr = {5,9,4,2,7,3};
		selectSort(arr);
	}
}

结果如下:

第1轮比较后
[2, 9, 4, 5, 7, 3]
第2轮比较后
[2, 3, 4, 5, 7, 9]
第3轮比较后
[2, 3, 4, 5, 7, 9]
第4轮比较后
[2, 3, 4, 5, 7, 9]
第5轮比较后
[2, 3, 4, 5, 7, 9]

如果在交换的之前进行判断最小元素的下标是否等于当前i的下标,如果相等,则不交换。如果不等,则交换。

 

 

你可能感兴趣的:(算法排序)