一、排序和算法
排序是算法中的一部分,也叫排序算法。算法个别用来解决数据,而数据的解决最好是要找到他们的法则,这个法则中有很大一部分就是要进行排序,所以须要有排序算法。本节解说的是抉择排序,从抉择排序开始意识排序的一些根底概念。之所以将抉择排序作为排序的入门,起因是抉择排序算法的逻辑最好了解。
二、抉择排序
2.1 抉择排序算法逻辑抉择排序是一种最简略的排序算法。其排序的逻辑如下:
1、有一个待排序的数组 A(以下简称 A)。
2、从 A 中找出最小的元素。
3、将找到的最小元素跟数组 A 中第一个元素替换地位(如果最小元素就是第一个元素,则本人跟本人替换地位);如下图:
(如上图,长方形高下代表数字的大小,找到最小的数字,跟第一个地位的数据进行替换)替换之后,后果如下图所示:
4、而后,在剩下的 4 个数字中再找到最小的那个数字,跟第 2 个地位的数字替换。如下图:
替换之后的后果如下如:
5、再在剩下的三个数字中,找到最小的那个数字跟第 3 个地位的数字替换地位。上图中剩下的三个数字中最小的就是第 3 个地位的数字,所以,它本人跟本人替换地位,就是不变。
同理第四个数字也是不变,第 5 个数字也是不变。(上图中例子第 3、4、5 个元素正好就是对应的排序,所以不变。如果不是对应的最小数字,同理替换地位就行。)以上就是抉择排序的算法逻辑,十分好了解。(如果有疑难的同学,欢送下方留言)。
2.2 抉择排序算法代码实现了解了抉择排序的逻辑之后,接下来通过 java 代码实现抉择排序算法。步骤如下:
1、找出最小的数字
2、将最小的数字放到第一个地位
3、将第一个地位的数字,放到本来是最小数字的地位。
4、反复下面 3 个步骤抉择排序 java 代码如下:
/**
- 抉择排序
*/
public static void algorithm4(){
// 定义一个整数类型数组,用于排序的原始数据
int[] array={3,5,1,2,4};
// 获取数组的大小
int length = array.length;
// 第一个循环用来遍历数组中的所有数字
for (int i = 0; i < length; i++) {
// 初始化一个变量,用来记录最小数字的下标。初始默认假如第一个数字就是最小数字
int minIndex = i;
// 第二个循环,通过比拟获取数组中最小的数字的下标。
for (int j = i+1; j < length ; j++) {
// 如果找到更小的数字,
if (array[minIndex]>=array[j]) {
// 将 minIndex 变量的值批改为新的最小数字的下标。
minIndex = j;
}
}
// 所有数字一个个比拟完结之后,就能确认那个数字最小了。
// 将最小的数字替换到第一个地位,将第一个地位的数字放到最小数字原来的地位,就是一次替换。
int temp=array[i];
array[i]=array[minIndex];
array[minIndex]=temp;
}
// 将排序之后的数组打印进去。
// 上面的输入是不计算工夫复杂度的,因为理论开发中这段输入代码会被删掉
for (int i = 0; i < length; i++) {
System.out.print(array[i]+”,”);
}
}
以上就是抉择排序的代码实现。学习了后面的工夫复杂度之后,大家能够计算一下抉择排序的工夫复杂度是多少呢?
2.3、抉择排序的工夫复杂度抉择排序总共循环了所少次?n+(n-1)+(n-2)+(n-3)+…+ 1 上述这个表达式,反过来写就是 1 +2+3+4+5+…+n。高斯算法就是(n+1)n/2=(n^2+n)/2=1/2n^2+n/2。当 n ->∞时,利用极限思维 1 /2*n^2+n/ 2 能够等于 n^2,记作 O(n^2),也就是抉择排序的工夫复杂度是 O(n^2)。
总结抉择排序是一种简略的排序算法,实用于数据量较小的状况,因为依据工夫复杂度剖析,数据量越大,抉择排序所破费的工夫依照平方倍数增长,会十分慢。然而抉择排序也有它的劣势,抉择排序的劣势就是思维逻辑简略。抉择排序还有个特点,就是不管数组的程序是排好序或者是乱序的,抉择排序都须要破费一样的工夫来计算。
比方,利用抉择排序对数组 {1,2,3,4,5} 和数组 {3,1,4,2,5} 排序所破费的工夫是一样的。排序是算法中比拟重要的内容,从简略的动手,从易到难学习常见排序算法是一个比拟好的形式。如果有疑难的欢送大家留言探讨。