冒泡排序

Tags
排序

基本格式

#include <stdio.h> int main() { int i, j, temp; int arr[] = {5, 7, 8, 1, 2, 4, 6, 9, 12}; int len = sizeof(arr)/sizeof(int); for(i = 0; i < len - 1; i++) { for (j = 0; j < len - 1 - i; j++) { if(arr[j] > arr[j+1]) { temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } for(i = 0; i < len; i++) { printf("%d ", *(arr+i)); } printf("\n"); return 0; }

优化版本

优化的原理,当一次内循环中没有发生过任何的数据交换,这意味着数组本身就是有序的,这种情况下,可以直接 break 外循环。
#include <stdio.h> int main() { int i, j, temp, flag; int arr[] = {5, 7, 8, 1, 2, 4, 6, 9, 12}; int len = sizeof(arr)/sizeof(int); for(i = 0; i < len - 1; i++) { flag = 0; for (j = 0; j < len - 1 - i; j++) { if(arr[j] > arr[j+1]) { temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } if(flag == 1) break; } for(i = 0; i < len; i++) { printf("%d ", *(arr+i)); } printf("\n"); return 0; }

可参考资料