冒泡排序
何为冒泡:
犹如在水底吐泡泡,泡泡不断的浮到水面一样,通过一遍一遍的对数组中的元素进行两两比较,把数值大(升序)或者数值小(降序)的值不断的"浮"到数组的后面,形成一个有序的数组。
如何冒泡:
每一轮两两比较,如果比后面的数大,则交换两个数,如下图:第一轮比较完,最大的数值9会"浮"到最后一个元素的位置上
往后每一轮都从0(头位置)到 n-i(n为数组长度, i 为轮次)挨个两两比较并在符合条件的时候交换,最终乱序的数组会依次按顺序排好序,如下图。
实现冒泡:
int bubble_sort(int *data, int length) {
for(int i = 0; i < length - 1 ; i++) { //冒泡轮次
for(int j = 0; j < length - 1 - i; j++) { //每个轮次的冒泡算法
if(data[j] > data[j+1]) {
//交换两个数
int tmp = data[j+1];
data[j+1] = data[j];
data[j] = tmp;
}
}
print_array(data, length); //打印每次循环后的数组
}
}
int main() {
int i = 0;
int data[DATA_ARRAY_LENGTH] = {10, 12, 9, 1, 7, 8, 2, 5, 3, 6, 11, 4};
print_array(data, DATA_ARRAY_LENGTH);
bubble_sort(data, DATA_ARRAY_LENGTH);
print_array(data, DATA_ARRAY_LENGTH);
}
程序输出
附加tips
- 可以在排序算法中加入标志位:如果当次循环没有发生任何交换数据的行为的话,则说明排序已经完成。
- 该算法的时间复杂都是O(n^2)。
- 您的点赞还有评论是我前进的最大动力,谢谢