氣泡排序演算法
void print_list(int data_list[] , int n) { for(int i = 0 ; i < n ; i++) printf("%5d " , data_list[i]); printf("\n"); } void swap_data(int *a , int *b) { int temp; temp = *a; *a = *b; *b = temp; } void bubble_sort(int data_list[] , int n) { int flag = n; for(int i = 0 ; i < n - 1; i++)//迴圈的次數,有n個數就要迴圈n-1次 { int last_swap = flag;//記錄上一次交換的位置(從這個位置開始為有序區) flag = 0; //每趟交換前初始位置標誌 printf("%d\n", last_swap); for(int j = 0 ; j < n - i - 1 && j < last_swap - 1; j++)//從下標0開始兩兩比較,一直比較到有序區的前一個位置 { if(data_list[j] > data_list[j + 1]) { swap_data(&data_list[j] , &data_list[j + 1]); flag = j + 1; } } if(flag == 0)//沒有做過交換,已經完全有序的了 { printf("break\n"); break; } print_list(data_list , n ); } } void bubble_sort_main() { //int data_list[] = {8,9,6,4,7,2,1,3,5};//平均情況 //int data_list[] = {1,2,3,4,5,6,7,8,9};//最好情況 int data_list[] = {9,8,7,6,5,4,3,2,1};//最壞情況 //int data_list[] = {2,1,3,4,5,6,7,8,9};//特殊情況 printf("data_list init:\n"); print_list(data_list , sizeof(data_list) / sizeof(int) ); printf("begin sort..\n"); bubble_sort(data_list , sizeof(data_list) / sizeof(int)); printf("sort end\n"); return; }