排序
(1)排序的介绍:
排序是将一群数据,依指定的顺序进行排序的过程。
- 内部排序:
指将需要处理的所有数据都加载到内部存储器中进行排序。包括(交换式排序法、选择式排序法和插入式排序法); - 外部排序法:
数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。包括(合并排序法和直接合并排序法)。
(2)冒泡排序法
冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从后向前(从下标较大的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前往后移,就像水底下的气泡一样逐渐向上冒。
(3)冒泡排序案例
将五个无序数:24,69,80,57,13使用冒泡排序法将其排成一个从小到大的有序数列
分析冒泡排序
数组[24,69,80,57,13]
第1轮排序:目标把最大数放在最后 //此时24已经与69发生了一次比较,69大则继续放在后一位,24继续在前一位
第1次比较:[24,69,80,57,13] //69与80比较,80大则置后,原位置不变
第2次比较:[24,69,80,57,13] //80与57比较,80大则置后,往后移一位,57则进一位
第3次比较:[24,69,57,80,13] //第3次比较时元素的位置为第2次比较交换结束后的位置,此时是80与13比较,80大则继续置后
第4次比较:[24,69,57,13,80] //第4次比较时元素的位置为第3次比较交换结束后的位置,此时结果确定下来了,80为最大的数
第2轮排序:目标是把第二大数放在倒数第二位置
第1次比较:[24,69,57,13,80] //69与57比较,69大则置后一位,57则进一位
第2次比较:[24,57,69,13,80] //69与13比较,69大则继续置后一位,13则前进一位
第3次比较:[24,57,13,69,80] //69与80不再需要比较,因为80已经在第一轮排序确定出来为最大的数,所以此次比较确定出倒数第二大的数69
第3轮排序:目标是把第三大数放在倒数第三位置
第1次比较:[24,57,13,69,80] //57与13比较,57大则往后移动一位,13前进一位
第2次比较:[24,13,57,69,80] //57不再需要与69比较,第2轮已经确定出倒数第二大的数69,现在直接可以确定倒数第三大的数为57
第4轮排序:目标是把第四大数放在倒数第四位置
第1次比较:[13,24,57,69,80] //刚进入第四轮排序时已经把24与13进行比较,24大则把13排在前面,此时已经确定出倒数第四大的数为24
而此时已经确定了4个数的位置,所以最后一个数自然是最小的数,不用再进行比较。
(4)总结冒泡排序特点:
1.一共有5个元素
2.一共进行了4轮排序,可以看成是外层循环
3.每1轮排序可以确定一个数的位置,比如第1轮排序确定最大数,第2轮排序,确定第2大的数位置,依次类推
4.当进行比较时,如果前面的数大于后面的数,如果前面的数大于后面的数,就交换
5.每轮比较都在减少 4->3->2->1
代码实现:
public static void main(String[] args) {
//24,69,80,57,13
int arr[] ={24,69,80,57,13};
for(int i=0;i<arr.length;i++){
for(int j=0;j<=i;j++){
if(arr[i]<arr[j]){
int temp = arr[i]; //temp是用于辅助交换的变量
arr[i]=arr[j];
arr[j]=temp;
}
}
}
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}