簡介😀
冒泡排序是一種簡單但效率較低的排序算法。它重復地掃描待排序元素列表,比較相鄰的兩個元素,并將順序錯誤的元素交換位置,直到整個列表排序完成。
實現🧐
- 以下內容為本人原創,經過自己整理得出,有問題歡迎評論區留言,引用請標明出處,謝謝!🫡
/*** @author bhlu* @date 2023-08-16* * @brief 冒泡排序* * @param[in] data 數字數組* @param[in] size 數組長度* * @return 無
*/
void bubble_sort(int data[], int size)
{// 按照上圖的方法,遍歷size-1次for(int i = 0; i < size - 1; i++){// 標記: 用于判斷這次遍歷是否了數據,0->修改,1->未修改int flag = 1;// 每輪判斷的次數,按上圖的方法,第一輪是size-1,然后每次都會少一次,可以使用size-1-ifor(int j = 0; j < size - 1 - i; j++){// 將索引指向的數據與索引下一個數據進行比較,大于就換位置if(data[j] > data[j+1]){int swap = data[j];data[j] = data[j+1];data[j+1] = swap;flag = 0; // 改變標記}}if(flag)// 如果還是1,說明已經排好了,就breakbreak;}
}
完整代碼🫠
sort.c
#include "sort.h"/*** @author bhlu* @date 2023-08-16* * @brief 冒泡排序* * @param[in] data 數字數組* @param[in] size 數組長度* * @return 無
*/
void bubble_sort(int data[], int size)
{// 按照上圖的方法,遍歷size-1次for(int i = 0; i < size - 1; i++){// 標記: 用于判斷這次遍歷是否了數據,0->修改,1->未修改int flag = 1;// 每輪判斷的次數,按上圖的方法,第一輪是size-1,然后每次都會少一次,可以使用size-1-ifor(int j = 0; j < size - 1 - i; j++){// 將索引指向的數據與索引下一個數據進行比較,大于就換位置if(data[j] > data[j+1]){int swap = data[j];data[j] = data[j+1];data[j+1] = swap;flag = 0; // 改變標記}}if(flag)// 如果還是1,說明已經排好了,就breakbreak;}
}
sort.h
#ifndef __SORT_H
#define __SORT_H#include <stdio.h>extern void bubble_sort(int data[], int size);#endif
main.c
#include "sort.h"int main(void)
{int data[] = {10, 5, 2, 3, 4, 7, 6};int size = sizeof(data) / sizeof(data[0]);printf("排序前: ");for (int i = 0; i < size; i++)printf("%d ", data[i]);printf("\n");bubble_sort(data, size);printf("排序后: ");for (int i = 0; i < size; i++)printf("%d ", data[i]);printf("\n");return 0;
}