1.什么是排序算法:
排序(sort)是指将数据元素按照指定关键字的大小递增/递减次序重新排列。排序是线性表,二叉树等数据结构的一种基本操作,通过排序可以提高查找的效率。
排序算法的分类:
一:分为内部排序与外部排序:
内部排序:指将需要处理的所有数据都加载到内存储存器中进行排序。
外部排序:数据量大,无法全部加载到内存中,需要借助外部储存进行排序。
2.开发者必备的排序算法有:
一:冒泡排序 二:选择排序 三:直接插入排序 四:归并排序 五:快速排序
六:堆排序 七:希尔排序 八:基数排序 (这里首先实现冒泡排序算法)
3.什么是冒泡排序算法:冒泡排序算法属于内部排序算法的交换排序。
原理:比较相邻两个元素的大小,如果反序,则交换。若按升序排序,每趟将数据序列的最大数换到最后位置,像气泡一样冒出。(降序同理)
举例演示:
下面实现冒泡排序算法:
public static void BubbleSort(int[] arr) {
int temp;//定义一个临时变量,用于交换元素间的位置。
boolean flag = false;//布尔标记
//i表示第几轮“冒泡”,j 表示“走访”到的元素索引。
// 每一轮“冒泡”中,j 需要从列表开头“走访”到 array.length - 1 的位置。
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
flag = true;
}
}
//如果不为真,则说明没有进行交换,直接终止。
if (!flag) {
break;
} else {
flag = false;//继续进行交换。
}
}
System.out.println(Arrays.toString(arr));
}
3.冒泡排序算法分析:
最好情况:数据序列排序,只需一趟扫描,比较n次,没有数据移动。
时间复杂度为:O(n)
最坏情况:数据序列随机排列和反序排列,需要n-1趟扫描,比较次数与移动次数都是O(n^2)。
时间复杂度为:O(n^2)
总之,数据序列越接近有序,冒泡排序算法时间效率越高,为O(n)~O(n^2)。
冒泡排序算法需要一个辅助空间用于交换两个元素,空间复杂度为O(1)。
-------------------------------------------------------------------------------------------------------
冒泡排序算法稳定但是效率不高。
4.冒泡排序算法的使用情景:数据量不大,并且对稳定性有要求,基本有序的情况。