选择排序
选择排序:(一直选择“第一位置元素”,与后边的数进行比较.)
选择第一个数,第一个数成为最小元素之后,再选择第二个数,第二个数成为除第一个元素之外最小的数(即,新的第一位置元素)之后,再选择第三个数…
·
思想:
1)让数组中的第一个数,依次与它后面的那些数们进行比较,
1.1)如果第一个数小于等于后面的数,不交换,继续遍历;
1.2)如果第一个数大于后面的数,就进行位置的交换。交换之后,新的第一个数,继续和后面的数进行比较;
这样多轮内循环结束之后,数列中最小的数就在第一个位置了;
`
2)之后,外循环+1(即,重新设定"第一位置元素"),内循环再来多轮,数列中第二小的数就选出来了;
3)外循环再+1,内循环再来一遍,数列中第三小的数就选出来了;
…
选择排序的时间复杂度是:O(n²)。
·
代码:
package xuanzepaixu;
/**
* @author:张永辉;
* @date: 2020/3/16; 11:41
* todo: 选择排序:(选择第一位置元素)
* 1)选择第一位置元素,
* 和后边的数依次比较,
* 大于后边的数,就进行交换;然后交换后仍是第一位置的数继续与后边的数进行比较;
* 小于等于后边的数,则继续遍历后边的下一位数;
* *
* 2)外循环控制第一位置元素—>arr[i],第一轮外循环之后,最小的数就站在了第一个位置;
* *
* 3)第二轮外循环,第一轮选出的那个第一位置元素不再参与比较,重新设定第二个数为第一位置元素,和后边的数依次比较,...
*/
public class XuanZe2 {
public static void main(String[] args) {
// 一,定义数组:
int[] arr = {23,54,65,3,5,2,87,33,345,435,11,325,555,121,346,0,20,49,17};
// 二,定义一个临时变量,用来后边交换元素顺序,作中间值;
int temp = 0;
// 三,开始排序:
// 1),常规操作,先定义一个外循环:(用来控制第一位置元素)
// 只有在多轮内循环之后,才选出第一个位置是最小的数,所以,"第一位置元素"不能随着内循环而变化,而是应该跟着外循环而变化,因为每一轮外循环过后,选出一个“第一位置元素”;所以"第一位置元素"应该是arr[i];
for (int i = 0; i < arr.length; i++) {
// 2),内循环,让“第一位置元素”依次与后边的元素进行比较;
for (int j = i+1; j < arr.length; j++) {
// 2.1)如果第一个数大于后边的数,则进行交换;交换之后,j++(继续往后遍历),此时、此后,仍然是第一个位置的数(arr[i])与后边的数进行比较;
if (arr[i] > arr[j]) {
temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
// 2.2)如果第一个数 不大于 后边的数,则继续遍历后边的下一个数;
else{
continue;
}
}
}
// 四,打印结果:
for (int i : arr) {
System.out.print(i+"----");
}
}
}