2015年9月22日-周二-写的几个排序算法

时间:2022-08-06 19:07:11

1、快速排序算法

//quick sort()
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <stdlib.h>
#include <unistd.h>
int quick_sort(int a[],int s,int t)
{
    int i=0,j=0,tmp=0;
    if(s<t)
    {
        i=s;j=t+1;
        while(1)
        {
            do{i++;}
            while(!(a[i]>=a[s]||i==t));
            do{j--;}
            while(!(a[j]<=a[s]||j==s));
            if(i<j)
            {
                tmp=a[i];
                a[i]=a[j];
                a[j]=tmp;
            }
            else
                break;
        }
        tmp=a[s];
        a[s]=a[j];
        a[j]=tmp;
        quick_sort(a,s,j-1);
        quick_sort(a,j+1,t);
    }
}

int main()
{
    int i=0;
    int a[10]={2,5,9,1,0,11,7,3,4,6};
    printf("before sort\n");
    for(i=0;i<10;i++)
    {
        printf("%d ",a[i]);
    }
    putchar('\n');
    quick_sort(a,0,10);
    printf("after sort\n");
    for(i=0;i<10;i++)
    {
        printf("%d ",a[i]);
    }
    putchar('\n');
    return 0;
}


2、 直接插入排序算法

//straight insert sort
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int straight_insert_sort(int a[],int n)
{
    
    #if 1
    int i=0,s=1,tmp=0;
    while(s<n)
    {
        if(a[s]<a[s-1])
        {
            tmp=a[s];
            i=s-1;
            a[s]=a[s-1];
            while(tmp<a[i])
            {
                a[i+1]=a[i];
                i--;
            }
            a[i+1]=tmp;
        }
        s++;
    }
    #endif
}
int main()
{
    int i=0;
    int a[8]={3,1,5,7,2,4,9,6};
    printf("before sort\n");
    for(i=0;i<8;i++)
    {
        printf("%d ",a[i]);
    }
    putchar('\n');
    straight_insert_sort(a,8);
    printf("after sort\n");
    for(i=0;i<8;i++)
    {
        printf("%d ",a[i]);
    }
    putchar('\n');
    return 0;
}


3、选择排序算法

#include <stdio.h>
void simple_sort(int a[],int n)
{
    int i=0,j=0,min=0,tmp=0;
    for(i=0;i<n;i++)
    {
        min=i;
        for(j=i+1;j<n;j++)
        {
            if(a[j]<a[min])
            {
                min=j;
            }
        }
        if(min!=i)
        {
            tmp=a[i];
            a[i]=a[min];
            a[min]=tmp;
        }
    }
}
int main()
{
    int i=0;
    int a[10]={3,10,9,2,1,7,6,4,8,5};
    printf("before sort\n");
    for(i=0;i<10;i++)
    {
        printf("%d ",a[i]);
    }
    printf("\nafter sort\n");
    simple_sort(a,10);
    for(i=0;i<10;i++)
    {
        printf("%d ",a[i]);
    }
    putchar('\n');
    return 0;
}