排序算法--交换排序--冒泡排序算法

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值