分析:
冒泡排序原理:如果升序排序,將一組整數序列的第一個元素和第二個元素相比較,如果第一個元素大於第二個元素,那麼交換這兩個元素,如果不滿足條件就不交換;然後將第二個元素和第三個元素比較,直到和最後一個元素和它前面的一個元素比較後,第一次排序完成,最大的一個數在最後。
最多排序n-1次(設有n個元素),就可排序完成。過程如下圖:
排序字符串序列也是根據這個原理,只是將比較兩個數大小改爲比較兩字符串大小,用strcmp可比較字符串,函數傳參時應該用二級指針,因爲字符串數組中存放的實際是每個字符串的首地址,我們要用二級指針保存數組的首地址。
冒泡排序一組整數序列:
#include<stdio.h> #include<stdlib.h> #include<assert.h> void bubble_sort(int *arr, int size) { assert(arr); int i = 0; int j = 0; int tmp = 0; int flag = 0; for (i = 0; i < size - 1; i++) { flag = 0; for (j = 0; j < size - 1 - i; j++) { if (arr[j]>arr[j + 1]) { tmp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = tmp; flag = 1; } } if (flag == 0) break; } } int main() { int arr[] = { 9,8,7,6,5,4,3,2,1,0}; int size = sizeof(arr) / sizeof(arr[0]); int i = 0; bubble_sort(arr, size); for (i = 0; i < size;i++) printf("%d ", arr[i]); system("pause"); return 0; }
冒泡排序一組字符串序列:
#include<stdio.h> #include<string.h> #include<stdlib.h> void bubble_sort(char **str,int size) { int i = 0; int j = 0; int flag = 0; char *tmp = NULL; for (i = 0; i < size - 1; i++) { flag = 0; for (j = 0; j < size - 1 - i; j++) { if (strcmp(*(str + j), *(str + j + 1))>0) { tmp = *(str + j); *(str + j) = *(str + j + 1); *(str + j + 1) = tmp; flag = 1; } } if (flag == 0) break; } } int main() { char *str[] = { "ffff","bbbadd","bbbaaaa","cccccc","ddddddd","ssssss","eeeeeee"}; int i = 0; int size = sizeof(str) / sizeof(str[0]); bubble_sort(str,size); for (i = 0; i < size; i++) { printf("%s ", str[i]); } system("pause"); return 0; }