常见排序

发布于:2016-10-18 17:46

#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);
}

共有8条评论
正序查看
倒序查看
邢帅 2016-10-18 19:09
回复
这个代码看不懂,不过我觉得很厉害
回复

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

xs20000150 2016-10-18 22:53
回复
我也不懂,但是很厉害的样子
吴宇浩 2016-10-19 00:22
回复

。。。厉害啊

爱上猫的胖妹纸 2016-10-19 00:23
回复

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

范志军 2016-10-19 11:05
回复

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

江伟锋 2016-10-19 18:50
回复

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

林亨权 2016-10-19 19:08
回复

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

回复:常见排序

图片
视频

0

今日新帖

0

昨日新帖

5

帖子总数

推荐
换一组
暂无数据