有趣的冒泡排序

2019-06-18  本文已影响0人  始于尘埃

跟着米Sir学编程

#include <stdio.h>
#include <stdlib.h>
//初级冒泡排序
void func1(int a[],int n){
    int temp=0;
    for(int i=0;i<n-1;i++){    //当循环比较n-1次的时候,最后的那个元素已经确定了
        for(int j=i+1;j<n;j++){    //按道理来说,第二次循环会少一次,但是第二次循环是要所有元素都要遍历,所以是n-2+1=n-1
            if(a[i]>a[j]){
                temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
        }
    }
}
//冒泡排序升级版(关键:元素两两比较;效率有所提升)
void func2(int a[],int n){
    int temp = 0;
    int flag=1;
    for(int i=0;i<n-1&&flag;i++){    //循环n-1次:最后一个元素不用比价;用来存放元素
        for(int j=n-1;j>i;j--){ //重最底层开始做循环
            flag=0;
            if(a[j-1]>a[j]){
                temp = a[j-1];
                a[j-1] = a[j];
                a[j] = temp;
                flag=1;      //只要看到flag没有发生变化,就证明已经排好了
            }
        }
}
}
void main(){
    int a[10]={2,5,3,1,7,6,9,0,8,10};
    func2(a,10);
    for(int i=0;i<10;i++){
        printf("%d->",*(a+i));
    }
    printf("\n");
    system("pause");
}
//直接插入排序
#include <stdio.h>

int main(){
    int i;
    void func2(int arr[],int n);
    int a[9]={0,1,5,2,3,7,9,6,4}; //func2中a[0]作为哨兵
    func2(a,9);
    for(i=1;i<9;i++){
        printf("->%d",a[i]);
    }
    return 0;
}
void func1(int arr[],int n){
    int i,j,temp;
    for(i=1;i<n;i++){
        if(arr[i]<arr[i-1]){  //证明需要移动位置
            temp=arr[i];

            for(j=i-1;arr[j]>temp;j--){   //依次比较i-1后面的每一个元素,如果>temp,需要向后移动(覆盖);退出该for循环时,前两个数字相等,需要把后一个数字替换成较大的
                arr[j+1]=arr[j];     //依次替换
            }
            arr[j+1]=temp;
        }
    }
}
void func2(int k[],int n){//如果第一个元素k[0]设为哨兵
    //1-n进行比较
    for(int i=2;i<n;i++){ //重第二个元素开始插入
        //每选取一个元素,都要进行下列插入
        if(k[i-1]>k[i]){
            k[0]=k[i];  //哨兵保存
            k[i] = k[i-1]; //把最大的数弹出去(由于已近是排好序的,所以k[i-1]就是最大的数)
            for(int j=i-2;k[j]>k[0];j--)//由于前面已经进行了交换,所以i-2开始
            {
                //交换覆盖
                k[j+1]=k[j];
            }
            //交换完后
            k[j+1]=k[0];
        }
    }
    
}

    

上一篇下一篇

猜你喜欢

热点阅读