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;
}
排序算法--交换排序--冒泡排序算法
最新推荐文章于 2019-10-10 16:49:01 发布