一、排序算法
1.1 概念
排序:假设含有n个记录的序列为{R1,R2,…,Rn},其相应的关键字序列为{K1,K2,…,Kn}。将这些记录重新排序为{Ri1,Ri2,…,Rin},使得相应的关键字值满足条Ki1<=Ki2<=…<=Kin,这样的一种操作称为排序。
通常来说,排序的目的是快速查找。
1.2 排序衡量标准
衡量排序算法的优劣:
1.时间复杂度:分析关键字的比较次数和记录的移动次数
2.空间复杂度:分析排序算法中需要多少辅助内存
3.稳定性:若两个记录A和B的关键字值相等,但排序后A、B的先后次序保持不变,则称这种排序算法是稳定的。
1.3 排序的分类
排序算法分类:内部排序和外部排序。
内部排序:整个排序过程不需要借助于外部存储器(如磁盘等),所有排序操作都在内存中完成。
==说明:==后面详细讲的冒泡排序、快速排序、归并排序和堆排序都是内部排序。
外部排序:参与排序的数据非常多,数据量非常大,计算机无法把整个排序过程放在内存中完成,必须借助于外部存储器(如磁盘)。外部排序最常见的是多路归并排序。可以认为外部排序是由多次内部排序组成。
二、冒泡排序
排序思想:
相邻两元素进行比较,如有需要则进行交换,每完成一次循环就将最大元素排在最后(如从小到大排序),下一次循环是将其它的数进行类似操作。
效率分析:
时间效率:O(n^2)
空间效率:空间效率很高,只需要一个附加程序单元用于交换,其空间效率为O(1)
稳定性:稳定
实现代码如下:
public class SortTest {
public static void main(String[] args) {
int[] arr = new int[] {
23,445,32,65,-32,-43,0,9,72,32};
//使用冒泡排序实现数组元素从小到大的顺序排序
for(int i = 0;i < arr.length -1;i++) {
for(int j = 0;j < a