先给出一个数组r[]={10,2,6,7,3},让其从小到大排序
基本思想:让数组中(按序号从小到大)相邻的两个元素比较,如果反序则交换,直至没有反序记录为止。
rj ... rj+1 | ri+1 <= ...<= rn-1 <=rn
无序区 有序区
1<=j<=i-1 | 已位于最终位置
初始序列 [10 2 6 7 3]
第一趟排序结果 [2 6 7 3 10]
第二趟排序结果 [2 6 3 7 10]
第三趟排序结果 [2 3 6 7 10]
请注意:在一趟起泡排序过程中,如果有多个记录交换到最终位置(最终位置指的是已经排好序的区域),则下一趟起泡排序将不处理这些记录;另外,如果一趟起泡排序过程中,若没有记录相互交换,说明序列已经排好序了,可以直接结束算法。
主要算法代码:
public static void bubbleSort(int[] n) {
int bound,exchange=n.length-1; //第一趟起泡排序的区间是[0,n-1]
while(exchange!=0) { //当上一趟排序有记录交换时
bound=exchange;
exchange=0;
for(int j=0;j<bound;j++) //无序区为[0...bound]
//若有记录交换,exchange负责最后一次记录交换的位置,最后一次交换的位置之后便是有序区,下次无需检测
if(n[j]>n[j+1])
{
int temp=n[j];
n[j]=n[j+1];
n[j+1]=temp;
exchange=j;
}
}
}