常见排序

头像
王涛
2016-10-18 17:46:20

#include<stdio.h>
/*冒泡排序*/
void bubble(int *a,int n) /*定义两个参数:数组首地址与数组大小*/

{
    int i,j,temp;
    for(i = 0;i < n - 1;i++)
        for(j = i + 1;j < n;j++) /*注意循环的上下限*/
            if(a[i] > a[j])
            {
                temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
}
/*选择排序*/
void choise(int *a,int n)
{
    int i,j,k,temp;
    for(i = 0;i < n - 1;i++)
    {
        k = i; /*给记号赋值*/
        for(j = i + 1;j < n;j++)
            if(a[k] > a[j])
                k = j;/*k总是指向最小元素*/
            if(i != k)
            {
                /*当k!=i时才交换,否则a[i]即为最小*/
                temp = a[i];
                a[i] = a[k];
                a[k] = temp;
            }
    }    
}
/*快速排序*/
void quick(int * a,int i,int j)
{
    int m,n,temp;
    int k;
    m = i;
    n = j;
    k = a[(i + j) / 2];/*选取的参照*/
    do
    {
        while(a[m] < k && m < j);
            m++; /* 从左到右找比k大的元素*/
        while(a[n] > k && n > i);
            n--;/* 从右到左找比k小的元素*/
        if(m <= n)
        {
             /*若找到且满足条件,则交换*/
             temp = a[m];
             a[m] = a[n];
             a[n] = temp;
             m++;
             n--;
        }
    }
    while(m <= n)
    if(m < j)
        quick(a,m,j);
    if(n > i)
        quick(a,i,n);
}
/*插入排序*/
void insert(int * a,int n)
{
    int i,j,temp;
    for(i = 1;i < n;i++)
    {
        temp = a[i];/*temp为要插入的元素*/
        j = i - 1;
        while(j >= 0 && temp < a[j])
        {
             /*从a[i-1]开始找比a[i]小的数,同时把数组元素向后移*/
            a[j + 1] = a[j]
            j--;
        }
        a[j + 1] = temp;/*插入*/
    }
}
/*希尔排序*/
void shell(int  * a,int n)
{
    int i,j,k,x;
    k = n / 2;/*间距值*/
    while(k >= 1)
    {
        for(i = k;i < n;i++)
        {
            x = a[i];
            j = i - k;
            while(j >= 0 && x < a[j])
            {
                a[j + k] = a[j];
                j -= k;
            }
            a[j + k] = x;
        }
        k /= 2;/*缩小间距值*/
    }
}
void print(int * a,int n)
{
    int i;
    for(i = 0;i < n;i++)
        printf("%5d",a[i]);
    printf(" ");
}
int main()
{
    int a1[] = {13,0,5,8,1,7,21,50,9,2};
    int a2[] = {13,0,5,8,1,7,21,50,9,2};
    int a3[] = {13,0,5,8,1,7,21,50,9,2};
    int a4[] = {13,0,5,8,1,7,21,50,9,2};
    int a5[] = {13,0,5,8,1,7,21,50,9,2};
    printf("The original list:");
    print(a1,10);
    printf("According to bubble:");
    bubble(a1,10);
    print(a1;10);
    printf("According to choise:");
    choise(a2,10);
    print(a2,10);
    printf("According to quick:");
    quick(a3,0,9);
    print(a3,10);
    printf("According to insert:");
    insert(a4,10);
    print(a4,10);
    printf("According to shell:");
    shell(a5,10);
    print(a5,10);
}

全部回复
正序查看
头像
邢帅
这个代码看不懂,不过我觉得很厉害
2016-10-18 19:09:34
...
头像
XS学生会主席-付冰洁

感觉好厉害厉害啊  可以收藏了 分享给我的小伙伴们看吗  真棒

2016-10-18 22:38:28
...
头像
xs20000150
我也不懂,但是很厉害的样子
2016-10-18 22:53:37
...
头像
吴宇浩

。。。厉害啊

2016-10-19 00:22:02
...
头像
爱上猫的胖妹纸

加油!虽然我看不懂,但是我来给你顶顶帖子B_61.gif

2016-10-19 00:23:53
...
头像
范志军

这是常见的排序方法,写得不错,但记得要记得原理。加油....

2016-10-19 11:05:25
...
头像
江伟锋

加油,要记得理解他,多多练习。

2016-10-19 18:50:35
...
头像
林亨权

这代码写得不错,我一眼就看出我看不懂.B_01.gif

2016-10-19 19:08:36
...
没有更多了