一:主要思想
相邻关键码了两两比较,反序交换,直到没有反序为止
二:问题
1:如何找到有序区和无序去的分隔位置,以便下次比较有序区不再参与下一趟比较
2:如何判断结束
三:问题解决
1:将待排序列分为无需去和有序区,我们可以用exchange记录交换的位置,一趟排序后exchange保存有序区的第一个元素位置
2:设置bound变量,一趟之后bound=exchange
3:问题二解决
初始值为0,exchang没交换时候exchange=0;来判断
四:源代码
package com.ccut.bubbleSort;
import java.util.Arrays;
/**
*
* 冒泡排序
*
*/
public class BubbleSort {
/**
* @param args
*/
public static void main(String[] args) {
int[] array = { 0, 4, 54, 6, 8, 9, 4, 9, 12, 32 };
System.out.println(array.length);
BubbleSort(array);
System.out.print(Arrays.toString(array));
}
private static void BubbleSort(int[] array) {
int change=array.length-1;
//数组从零开始计数的
while (change!=0) {
int bound=change;
change=0;
for(int i=0;i<bound;i++)
{
if(array[i]>array[i+1])
{
int temp=array[i];
array[i]=array[i+1];
array[i+1]=temp;
change=i;
}
}
}
}
}
五:时间复杂度分析:
最好:正序 时间复杂度为0(n)
最坏:反序 时间复杂度O(n2)