个人学习整理,如有不足之处,请不吝指教。转载请注明:@CSU-Max
首先我们来看一下冒泡排序。冒泡排序是一种很慢的排序方法,但是也是最简单的一中排序方法,所以我们一般都以冒泡排序来开始我们的排序方法之旅。
原理描述:
(以按从小到大的顺序为例)先将n个元素中的第一个K
1与第二个K
2进行比较,如果K
1>K
2,则交换两个元素的位置,进而比较第二个和第三个元素的关键字,如此类推,直到比较完第n-1 个元素和第n个元素为止,这样,第一趟就完成了,这个有n个元素的序列中关键字最大的元素就会通过交换操作被放到了第n个位置上。同理进行第二趟,第二趟是对序列中的前n-1 个元素进行操作,将这个有n-1个元素的序列中关键字最大的元素通过交换操作放到第n-1个位置上。如此迭代多次,就会得出最终排好序的序列。一般来说,第i 趟排序是对元素序列的前n-i+1 个元素进行排序,使得前n-i+1 个元素中关键字最大的元素被放置到第n-i+1 个位置上。通过n-1 趟排序,就可以完成排序,使得序列有序。
图解说明:
待排序序列 14 45 56 10 11 24 45 23
第1趟 14 45 10 11 24 45 23
56
第2趟 14 10 11 24 45 23
45 56
第3趟 10 11 14 24 23
45 45 56
第4趟 10 11 14 23
24 45 45 56
第5趟 10 11 14
23 24 45 45 56
第6趟 10 11
14 23 24 45 45 56
第7趟 10
11 14 23 24 45 45 56
第1趟过程详解:
(1)
14 45 56 10 11 24 45 23 不交换
(2) 14
45 56 10 11 24 45 23 不交换
(3) 14 45
56 10 11 24 45 23 交换
(4) 14 45 10
56 11 24 45 23 交换
(5) 14 45 10 11
56 24 45 23 交换
(6) 14 45 10 11 24
56 45 23 交换
(7) 14 45 10 11 24 45
56 23
交换
(8) 14 45 10 11 24 45 23 56 第1趟完成
实现代码:
/**
* @Description :冒泡排序
* @param k 带排序的数组
* @param start 数组中待排序区间的起点
* @param end 数组中待排序区间的终点
*/
public void bubbleSort( int [] k, int start, int end){
int n = end - start + 1;
for ( int i = 1; i < n; i++){
for ( int j = start; j <= end -i; j ++){
if (k[ j ] > k[ j +1]){
int temp = k[ j ];
k[ j ] = k[ j +1];
k[ j +1] = temp;
}
}
}
}
//测试代码
public static void main(String[] args) {
MySortMethod method = new MySortMethod();
MyUtil myUtil = new MyUtil();
int [] r = {14, 45, 56, 10, 11, 24, 45, 23};
myUtil.printArray(r);
method.bubbleSort(r, 0, r. length -1);
myUtil.printArray(r);
}
MyUtil类的printArray方法就是一个打印数组元素的方法,在这里就不贴出来了。
相关分析:
空间效率: 仅使用一个辅存单元。
时间效率:O(n
2)。