八大排序,最简单的代码,最适合基础性学习。快速排序,冒泡排序,直接插入排序,二分法插入排序,直接选择排序,归并排序(分治法)

以下代码亲测,代码完全正确。

一、快速排序:

#include<stdio.h>
#define N 10
void quick(int m[],int ,int );
int main(){
    int  i;
    int m[N]={10,4,78,54,23,1,41,54,66,10};
    quick(m,0,N-1);
    for(i=0;i<N;i++)
    printf("%d ",m[i]);
    return 0;
}
void quick(int m[],int l,int r){
    if(l>=r) return ;
    int i,j,temp;
    temp=m[l];
    i=l;j=r;
    while(i!=j){
        while(m[j]>=temp&&i<j)  j--;
        if(i<j)  m[i++]=m[j];
        while(m[i]<=temp&&i<j)  i++;
        if(i<j)  m[j--]=m[i];
    }
    m[i]=temp;
    quick(m,l,i-1);
    quick(m,i+1,r);
}

二、冒泡排序:

#include<stdio.h>
#define N 10
void maopao();
int main(){
    maopao();
    return 0;
}
void maopao(){
    int m[N]={10,4,78,54,23,1,41,54,66,10};
    int i,j,temp;
    for(i=0;i<N-1;i++)
    for(j=0;j<N-i-1;j++)
        if(m[j]>m[j+1]){
            temp=m[j];
            m[j]=m[j+1];
            m[j+1]=temp;
        }
    for(i=0;i<N;i++)
        printf("%d ",m[i]);
    printf("\n");
}

三、二分法插入排序

#include<stdio.h>
#define N 10
void erfenfainsert();
int main(){
    erfenfainsert();
    return 0;
}
void erfenfainsert(){
    int m[N]={10,4,78,54,23,1,41,54,66,10};
    int left,high,mid;
    int i,j,temp;
    for(i=1;i<N;i++){
        temp=m[i];
        left=0;high=i-1;
        while(left<=high){
            mid=(left+high)/2;
            if(temp<m[mid]) high=mid-1;
            else left=mid+1;
        }
        for(j=i-1;j>=left;j--)    
            m[j+1]=m[j];
        if(left!=i)  m[left]=temp;
    }
    for(i=0;i<N;i++)
        printf("%d ",m[i]);
    printf("\n");
}

四、直接插入排序

#include<stdio.h>
#define N 10
void insert();
int main(){
    insert();
    return 0;
}
void insert(){
    int m[N]={10,4,78,54,23,1,41,54,66,10};
    int i,j,temp;
    for(i=1;i<N;i++){
        temp=m[i];
        for(j=i-1;temp<m[j]&&j>=0;j--)
            m[j+1]=m[j];
        if(j+1!=i)   m[j+1]=temp;
    }
    for(i=0;i<N;i++)
        printf("%d ",m[i]);
    printf("\n");
}

五、直接选择排序

#include<stdio.h>
#define N 10
void choose();
int main(){
    choose();
    return 0;
}
void choose(){
    int m[N]={10,4,78,54,23,1,41,54,66,10};
    int i,j,temp,k=0;
    for(i=0;i<N;i++){
        k=i;
        for(j=i+1;j<N;j++)
            if(m[j]<m[k])      k=j;
        if(k!=i)  {
            temp=m[i];
            m[i]=m[k];
            m[k]=temp;
        }
    }
    for(i=0;i<N;i++)
        printf("%d ",m[i]);
    printf("\n");    
}

六、归并排序

#include<stdio.h>
#define N 10
int m[N]={44,5,12,78,444,65,32,12,14,98};
int t[N];
void merge_sort(int ,int ,int );
void merge(int ,int );
int main(){
    int i;
    merge(0,N-1);
    for(i=0;i<N;i++)
        printf("%d ",m[i]);
}
void merge(int low,int high){
    if(low<high){
        int mid=(low+high)/2;
        merge(low,mid);
        merge(mid+1,high);
        merge_sort(low,mid,high);
    }
}
void merge_sort(int low,int mid,int high){
    int i,j,k;
    i=low;j=mid+1;k=low;
    while(i<=mid&&j<=high)  
        if(m[i]<m[j]) t[k++]=m[i++];
        else t[k++]=m[j++];
    while(i<=mid)  t[k++]=m[i++];
    while(j<=high) t[k++]=m[j++];
    for(i=low;i<=high;i++)
        m[i]=t[i];

    }

如需学习二分查找,点击https://blog.csdn.net/huang1600301017/article/details/81022277

猜你喜欢

转载自blog.csdn.net/huang1600301017/article/details/80976925