冒泡排序
时间复杂度:n^2,最优:n
空间复杂度:1
#include <stdio.h>
#define ARR_LEN(num) (sizeof(num) / sizeof(int))
void print_number(int *num, int len);
void bubble_sort(int *num, int len);
void swap(int *num1, int *num2);
int main(void) {
// int number[10] = {4,5,6,1,3,4,9,6,8,9};
int number[10] = {9,8,7,6,5,4,3,2,1,0};
bubble_sort(number, ARR_LEN(number));
print_number(number, ARR_LEN(number));
return 0;
}
int comp_cnt = 0;
int ass_cnt = 0;
void bubble_sort(int *num, int len)
{
int swap_cnt = 0;
int last_swap_cur = 0, tmp_last_swap_cut = 0;
while(true)
{
swap_cnt = 0;
for(int cnt = 0; cnt < len - 1; cnt++)
{
comp_cnt++;
if (num[cnt] > num[cnt + 1])
{
tmp_last_swap_cut = cnt;
ass_cnt++;
swap_cnt++;
print_number(num, len);
swap(&num[cnt], &num[cnt + 1]);
}
//优化冒泡排序的比较次数
if (cnt == last_swap_cur - 1)
{
break;
}
}
printf("last_swap_cur: %d\n", last_swap_cur);
last_swap_cur = tmp_last_swap_cut;
tmp_last_swap_cut = 0;
if (swap_cnt == 0)
{
break;
}
}
}
void swap(int *num1, int *num2)
{
int tmp = 0;
tmp = *num1;
*num1 = *num2;
*num2 = tmp;
}
void print_number(int *num, int len)
{
for(int cnt = 0; cnt < len; cnt++)
{
printf("%d,", num[cnt]);
}
printf("ass_cnt: %d, comp_cnt: %d\n", ass_cnt, comp_cnt);
}