C语言五大排序(选择、冒泡、插入、希尔、快速)

C语言小白学习整理五大常用的排序方法:选择排序、冒泡排序、插入排序、希尔排序、快速排序。在此做个笔记,也欢迎大家参考治指正。

#include <stdio.h>

#define SIZE_NUM 8   /*数组长度  */

/*换位函数*/
void Swap(int* num1, int* num2){
    int midValue = 0;
    midValue = *num1;
    *num1 = *num2;
    *num2 = midValue;
}

/*选择排序*/
void Select_Sort(int* s , int n){
    int i, j;
    for(i = 0; i < n-1; i++)
        for(j = i+1; j < n; j++)
            if(s[i] > s[j])
                Swap(&s[i],&s[j]);
}

/*冒泡排序*/
void MaoPao_Sort(int* s, int n){
    int i, j;
    for(i = 0; i < n-1; i++)
        for(j = 0; j < n-i-1; j++)
            if(s[j] > s[j+1])
                Swap(&s[j],&s[j+1]);

}

/*插入排序*/
void Insert_Sort(int* s, int n){
    int i, j, midValue;
    for(i = 1; i < n; i++){
        midValue = s[i];
        j = i-1;
        while(midValue < s[j] && j >= 0){
            s[j+1] = s[j];
            j--;
        }
        s[j+1] = midValue; 
    }
}
    
/*希尔排序*/
void Shell_Sort(int* s, int n){
    int i, j, gap;
    for(gap = n/2; gap > 0; gap/=2){
        for(i = gap; i < n; i++)
            for (j = i - gap; j >= 0 && s[j] > s[j+gap]; j -= gap)
                Swap(&s[j],&s[j+gap]);
    }
        
}

/*快速排序*/
void Quick_Sort(int *s , int left, int right){
    if(left < right){
        int i = left, j = right;
        int mid = s[i];
        while(i < j){
            while(mid < s[j] && j > left)
                j--;
            if(i < j)
                s[i++] = s[j];
            while(mid > s[i] && i < right)
                i++;
            if(i < j)
                s[j--] = s[i];
        }
        s[i] = mid;
        Quick_Sort(s, left, i);
        Quick_Sort(s, i, right);
    }
}


int main(){
    int Num_Group[SIZE_NUM];
    printf("enter 8 numbers:");
    for(int i = 0; i < SIZE_NUM; i++)
        scanf("%d",&Num_Group[i]);
    for(int i = 0; i < SIZE_NUM; i++)
        printf("%5d",Num_Group[i]);
    //Select_Sort(Num_Group, SIZE_NUM);
    //MaoPao_Sort(Num_Group, SIZE_NUM);
    //Insert_Sort(Num_Group, SIZE_NUM);
    //ShellSort(Num_Group, SIZE_NUM);
    //Quick_Sort(Num_Group, 0, SIZE_NUM);
    printf("\n atfter sorted:\n");
    for(int i = 0; i < SIZE_NUM; i++)
        printf("%5d",Num_Group[i]);

    return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值