前言
一旦建立了一个重要的数据库后,可能根据某些需求对数据进行不同方式的排序。
对数据进行排序有可能是检索的一个初始步骤。
由于排序非常重要而且可能非常耗时,所以它已经成为一个计算机科学中广泛研究的课题。
冒泡排序、选择排序、插入排序、希尔排序、快速排序
计算机程序不能像人一样一眼就看出数据的大小,它只能根据计算机的"比较"操作原理,在同一时间内对两个数进行比较。
- 比较两个数据项
- 交换两个数据项,或复制其中一项
冒泡算法
将最小的数据项放在数组的最开始,并将最大的数据项放在数组的最后。
双循环,外层循环--len--;内循环,遍历len元素,并两两交换swap(n,n+1),保证大的数据项都放在右边。
不变性
在许多算法中,有些条件在算法执行时是不变的,这些条件被称为不变性。 在冒泡算法中,不变性就是外层循环右边的所有数据项是有序的
效率
假设:共有10个数据项,遍历的次数: 9+8+7+6+5+4+3+2+1 = 45次
约等于n的平方除以2
O(N平方)
java
public static void main(String[] args) {
int[] af = new int[10];
af[0] = 32;
af[1] = 17;
af[2] = 1;
af[3] = 22;
af[4] = 32;
af[5] = 68;
af[6] = 46;
af[7] = 99;
af[8] = 77;
af[9] = 70;
System.out.println("排序前:");
Arrays.stream(af).forEach(e->{
System.out.print(e);
System.out.print(" ");
});
int len = af.length;
for (int out = len -1;out>1;out--){
for (int in = 0;in < out;in ++){
if (af[in] > af[in+1]){
swap(af,in,in+1);
}
}
}
System.out.println("排序后:");
Arrays.stream(af).forEach(e->{
System.out.print(e);
System.out.print(" ");
});
}
public static void swap(int[] af,int a,int b){
int temp = af[a];
af[a] = af[b];
af[b] = temp;
}