C语言入门到进阶(排序)----Day6 29th/Nov./2019

主要内容

冒泡排序 选择排序 插入排序

主要的技术

for的两层循环体  两个数组元素实现交换


冒泡排序

实现方式:每次遍历整个数组,找到最大的一个沉底
若数组有N个元素,
第一次需要遍历N-1次,
第二次需要遍历N-2次,
……
总共需要比较N-1次
代码如何实现
两层循环:
(1)、第一层循环控制需要遍历多少次
e.g3 0 1 8 7 25 4 9 6共10个元素,只需要遍历(10-1)次
(2)、第二层循环控制每次需要遍历多少次才能找到最大(内层循环)
每次从i=0开始,让i和i+1进行比较,确保i+1是最大的

注:(一般来说,程序里尽量做到循环层小于等于2层)

一个循环 两个循环
一次遍历就结束 每一次内部又有遍历

冒泡排序代码

#include <stdio.h>
int main(){
    int num[10] = {3,0,1,8,7,2,5,4,9,6};
    for(int i = 0; i < 10-1; i++){//第一层循环控制总共便利的次数
        for(int j = 0; j < 10 - i; j++){//第二层循环 开始每一次遍历,找到一个最大的数沉底
          //让j和j+1进行比较
            if(num[j] > num[j+1]){
          //交换数组元素的值
               int temp = num[j];
               num[j] = num[j+1];
               num[j+1] = temp;
              }
          }
    }
//输出按从小到大排序的数组元素
for(int i = 0; i < 10; i++){
   printf("%d ",num[i]);
}
return 0;
}
运行结果

选择排序

实现方式
取出数组元素num[i]所对应的的值,默认为最小的,利用temp保存最小的元素,让temp和num[i]后面的每个数进行比较,temp始终保存最小的那个数
代码如何实现
两层循环:
(1)、第一层循环控制总共需要遍历多少次
e.g3 0 1 8 7 2 5 4 9 6共10个元素,只需要遍历(10-1)次
(2)、第二层循环遍历出当前最小的数

选择排序代码

#include <stdio.h>

int main(){
    int num[10] = {3,0,1,8,7,2,5,4,9,6};
    
    for(int i = 0; i < 10-1; i++){
        int temp = num[i];//取出i对应的值,默认是最小的数 
        
        for(int j = i+1; j < 10; j++){
            if(temp > num[j]){
                int n = temp;
                temp = num[j];
                num[j] = n;
            }
        }
        
        num[i] = temp;
    }
for(int i = 0; i < 10; i++){
    printf("%d",num[i]);
}
    return 0;
}

运行结果

插入排序

实现方式
首先让num[i]和num[i+1]进行大小比较,数值小的往前移,再让num[i]和前面所有的元素进行比较,将最小的值置于最前面
代码如何实现
两层循环:
(1)、第一层循环控制总共需要遍历多少次
e.g3 0 1 8 7 2 5 4 9 6共10个元素,只需要遍历(10-1)次
(2)、第二层循环实现数组元素与之前的元素进行比较大小,最小的元素在最前

插入排序代码

#include <stdio.h>

int main(){
    int num[10] = {3,0,1,8,7,2,5,4,9,6};
    
    for(int i = 0; i < 10-1; i++){
        if(num[i] > num[i+1]){
            int temp = num[i];
            num[i] = num[i+1];
            num[i+1] = temp;
        }
        
        for(int j =  i; j > 0; j--){
            if(num[j] > num[j-1]){
               break;
            }else{
                int temp = num[j];
                num[j] = num[j-1];
                num[j-1] = temp;
            }
        }
    }
     for(int i = 0; i <10; i++){
        printf("%d ",num[i]);
     }

    return 0;
}
运行结果
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容