什么叫排序
排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。分内部排序和外部排序,若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序。反之,若参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问题为外部排序。内部排序的过程是一个逐步扩大记录的有序序列长度的过程。
排序的本质是什么?
元素的比较+元素的换位
怎么实现
我们拿数组作为一个容器,来存储那些无序的元素。
利用Java语言的循环for,逻辑if,和数组这三个基础知识来进行排序算法的实现。
冒泡排序
思路:
从前往后 两个两个元素进行比较,如果当前元素比之后的那个元素大,需要做两个元素位置的交换。
以从小到大(升序)排序为例,如果想让无序数组中的元素变得有序,冒泡排序先是遍历数组中每一个元素,从第一个元素开始,如果第一个元素比它后一个元素大,这两个元素就交换位置,否则不交换。如此遍历到数组的倒数第二个元素,倒数第二个元素与倒数第一个元素做比较,第一次遍历结束。第一次遍历会得到数组中数字最大的那个元素,第二次遍历会得到次大的元素,以此类推,经过数组的长度-1次的轮询,即可排序完毕。
代码实现
//冒泡排序
public static void bubbleSort(int [] array){
for(int i = 0;i<array.length-1;i++){
for(int j = 0;j<array.length-1-i;j++){
if(array[j] > array[j+1]){
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
}
选择排序
思路
在后面一堆的无序元素中找到(挨个找 循环)一个最小值(选择的过程),将最小值直接放在指定的位置(交换)。
选择排序与冒泡排序看起来很像,但是两者却有着本质区别。
选择排序刚开始将第一个元素暂定为最小值,标记这个最小值的索引,然后从第二个元素开始,依次遍历数组中每一个元素,如果这个元素比最小值还要小,就把这个元素确定为最小值,刷新minIndex索引值。经过一次遍历,我们得到的是真正的最小值的索引值。再利用外层for,将得到的最小值依次排列,最终得到一个有序的数组。
代码实现
//选择排序
public static void selectionSort(int [] array){
for(int i = 0;i<array.length;i++){
//每一次里面需要从当前位置i之后找 找到最小值
int minIndex = i;//用来记录最小值的索引位置
for(int j = i+1;j<array.length;j++){
if(array[j] <array[minIndex])
minIndex = j;
}
//将最小值与当前i所在的位置的值互换
int temp = array[minIndex];
array[minIndex] = array[i];
array[i] = temp;
}
}
区别
冒泡排序的外层循环,循环array.length-1次,每次循环都会确定一个最大值并将它放在后面。它的内层循环旨在进行两两元素的比较,通过“沉底”方式,获得最大值并将其放在后面。
选择排序的外层循环,循环array.length次,每次循环获得一个最小值并将它放在前面。但是,它的内层循环旨在通过遍历到的元素与暂定的最小值比较,获得最小值的索引。接着再回到外层循环,把最小值进行有序的排列。
来源:CSDN
作者:发光吖
链接:https://blog.csdn.net/qq_43598138/article/details/104201236