您的位置:首页 > 其它

冒泡排序

2016-05-16 19:15 246 查看

什么是冒泡?

每次比较【相邻】两个元素,若【顺序】错误就对把它们的位置互换。其中【顺序】指定是:从小到大或者从大到小。

注意:

趟数越靠后,需要两两比较的数越少,而不需要每趟都和全部数比较。

原理:

每一趟只能确定一个数归位。第一趟只能确定末尾的数,第二趟只能确定倒数第二位的数,以此类推。

根据它的原理,我们可以总结出:

有 x 个数需要排序,只需要将 x -1 个数归位(若还不明白,就自己手写下每一步操作)。而已经归位的数则无需比较,浪费性能。

代码说话

public void sort(int... sortNums) {
// 总共需要比较的趟数。因为最后一位数之后,已经没有和它相邻的数(即已归位)。so 总趟数为:总个数 - 1
final int count = sortNums.length - 1;
for (int i = 0; i < count; i++) {
// 该内循环遍历完,就有一位“最”值归位。 其中“最”,指的是当前这趟的“最”值,而不是全部数据中的“最”值
// 因此越往后面走,需要比较的次数越少。因为后面的数已经归位了,已经在它应该在的位置了,所以不需要和它比较
// 当前这趟,需要进行两两比较的数,即仅和未归位的数比较。
for (int j = 0; j < count - i; j++) {
// 相邻的数进行比较。顺序不对,进行互换
// 当前排序规则为:从小到大。若需要从大到小,则使用 < 号,即【sortNums[j] < sortNums[j + 1]】
if (sortNums[j] > sortNums[j + 1]) {
int flag = sortNums[j];
sortNums[j] = sortNums[j + 1];
sortNums[j + 1] = flag;
}
}
}
}


时间复杂度

O(N2)O(N^2) 这是一个很高的时间复杂度。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: