1. 程式人生 > >氣泡排序演算法

氣泡排序演算法

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; }