C语言的冒泡代码

来源:互联网 发布:iphone移动数据怎么关 编辑:程序博客网 时间:2024/04/30 06:06

//    数组排序
    /*
     数组排序:
     数组中存放的是数据,如同随机数一样,数组里的数据是无序的但是很多情况下我们都需要一组有序的数据,这个时候就用到了排序
     常见的排序方法:
     1 冒泡排序--(入门级的排序算法)
     2 选择排序--(相对来说性能好点)
     3 快速排序--(面试最常出的题)
     4 其他的,例如,基数排序,计数排序,桶排序,堆排序,哈希排序。。。。。可以搜索(13种排序详解)舞动的排序
     
     冒泡排序:
     实现思路:从左到右,执行多次循环,每次循环,也是从左到右,每次比较相邻两个数之间的大小,如果需要交换(是否从大到小),就执 行交换
     
     用代码书写冒泡排序?
     举个例子,找规律
     9  7 14 3
     第一趟
     第一次;7 9 14 3
     第二次:7 9 14 3
     第三次:7 9 3 14
     第二趟
     第一次:7 9 3 14
     第二次:7 3 9 14
     第三趟
     第一次:3 7 9 14
     一共四个数,一共比较了三遍,每趟比较了 4-趟数
     */

//冒泡

int main() {
/*
    int arr[] = { 9 , 4 , 13 , 5};                //定义一个数组
    for (int i = 0; i < 4 - 1; i++) {             //确定有几趟
        for (int j = 0; j < 4 - 1 - i; j++) {     //确定对应的第 i 趟 的 第 j 次
            if (arr[j] > arr[j+1]) {              //判断是否需要交换
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp ;                 //进行交换
            }
        }
    }
    for (int i = 0; i < 4; i++) {                 //
        printf("%d ",arr[i]);                     //输出交换后的数组
    }

    */

冒泡的优化,减少次数的运行

/*
int arr[] = {3,5,9,4,21,19,16,32};
for (int i = 0; i < 8-1; i++) {
    printf("运行到第几趟%d\n",i);
    BOOL flag = YES ;                            //给个BOOL类型,每趟都赋予YES
    for (int j = 0; j < 8 - 1 -i; j++) {
        if (arr[j] > arr[j+1]) {
            int temp = arr[j] ;
            arr[j] = arr[j+1] ;
            arr[j+1] = temp ;
            flag = NO ;                          //需要排序交换的赋予NO
        }
    }
    if (flag == YES) {
        break ;                                  //当已不再需要交换的时候,break跳出循环
    }
}
for (int i = 0; i < 8; i++) {
    printf("%d ",arr[i]);
}
*/


0 0
原创粉丝点击