一、排序和算法
排序是算法中的一部分,也叫排序算法。算法个别用来解决数据,而数据的解决最好是要找到他们的法则,这个法则中有很大一部分就是要进行排序,所以须要有排序算法。本节解说的是抉择排序,从抉择排序开始意识排序的一些根底概念。之所以将抉择排序作为排序的入门,起因是抉择排序算法的逻辑最好了解。
二、抉择排序
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}排序所破费的工夫是一样的。排序是算法中比拟重要的内容,从简略的动手,从易到难学习常见排序算法是一个比拟好的形式。如果有疑难的欢送大家留言探讨。
发表回复