Java基础21(数据结构—排序)

排序

(1)排序的介绍:
排序是将一群数据,依指定的顺序进行排序的过程。

  1. 内部排序:
    指将需要处理的所有数据都加载到内部存储器中进行排序。包括(交换式排序法、选择式排序法和插入式排序法);
  2. 外部排序法:
    数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。包括(合并排序法和直接合并排序法)。

(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]);
		}
	}
上一篇:Leetcode 57. 插入区间(新建列表/原地删除)


下一篇:MySQL Ripple 一款开源的MySQL binlog server软件