C语言编程——数组的排序

冒泡排序

从第一个开始两两比较,小的放前面,大的与后面继续比较,直至选出一个最大数,然后重复循环

实现方式:
1.每次遍历整个数组找出最大的一个数沉底
尽量做到循环层级少于等于2个
2.两层循环
a.第一层循环控制总共遍历多少次
10个元素只需遍历10-1次
b.第二层循环控制每次需要遍历多少次才能找到最大

#include "stdio.h"

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

return 0;
}

选择排序

实现方式:
1.每次遍历找出整个数组最小数置顶
2.两层循环
注:与冒泡排序类似

int main(){
    //选择排序
    int num[10] = {3,0,1,8,7,2,5,4,9,6};
    
    for(int i = 0; i < 10-1; i++){//控制次数 
        //取出i对应的数,默认是最小的数
        int temp = num[i];
         
        //从i后面开始查找当前最小的数 放到i的位置 
        for(int j = i+1; j < 10; j++){
            //让temp和i后面的每个数进行比较 
            //temp始终保存最小的那个数
            if(num[j] < temp){
                //交换
                int n = temp;
                temp = num[j];
                num[j] = n; 
            } 
        } 
        //当前的temp值是最小的,写入i对应的位置
        num[i] = temp; 
    }
    
    //输出
    for(int i = 0; i < 10; i++){
        printf("%d ", num[i]);
    } 
    return 0; 
}

插入排序

每次比较后,若前面一个数大于后面一个数则交换位置,然后继续与前一个数比较,否则否则与后一个数比较,重复直至比较完整个数组。

int main(){
    //插入排序
    int num[10] = {3,0,1,8,7,2,5,4,9,6};
    
    for(int i = 0; i < 10-1; i++){//控制次数 
        //判断i和i+1的大小
        if(num[i] > num[i+1]){
            //换位置
            int temp = num[i];
            num[i] = num[i+1];
            num[i+1] = temp;
            
            //让i对应的值和前面所有的值进行比较
            for (int j = i; j > 0; j--){
                //j和j-1进行比较
                if(num[j] > num[j-1]){
                    //当前这个位置就是这个数字的位置 
                    break;
                } else{
                    //j和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;
}

补充:交换两个变量的值

使用中间变量
int a = 1;
int b = 2;
int t;
t = a;
a = b;
b = t;
不使用中间变量

1 使用加法操作。

a+=b; 
b=a-b;
a -= b;

2 使用异或操作:

a^=b;
b^=a;
a^=b;

你可能感兴趣的:(C语言编程——数组的排序)