搜索
查看: 7328|回复: 35
打印 上一主题 下一主题

C语言排序

[复制链接]
跳转到指定楼层
楼主
发表于 2012-8-10 08:44:10 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
本帖最后由 =student= 于 2012-10-26 19:47 编辑

[ 本帖最后由 =student= 于 2012-8-10 21:43 编辑 ]\n\n
C语言主要排序有7种,分别是:选择排序, 快速排序,冒泡排序,堆排序,插入排序,归并排序,基数排序
平时用的比较多的是选择排序,代码如下:
  1. #include <stdio.h>
  2. int main()
  3. {
  4.         int a[10000],i,j,t,n;
  5.     printf("请输入排序数字的个数:");
  6.     scanf("%d",&n);//输入要排序数字的个数,自动从小到大排序
  7.     printf("请输入数据(数之间要有空格):");
  8.         for(i=1;i<=n;i++)//循环输入要排序的数据,数与数之间要有空格
  9.     {
  10.                 scanf("%d",&a[i]);
  11.         }
  12.     for(i=1;i<=n-1;i++)
  13.     {
  14.                 for(j=i+1;j<=n;j++)
  15.         {
  16.                         if(a[i]>a[j])//如果前面的数大于后面的数,则交换
  17.             {
  18.                  t=a[i];
  19.                 a[i]=a[j];
  20.                 a[j]=t;
  21.             }
  22.         }
  23.     }
  24.     printf("从小至大排序:");
  25.     for(i=1;i<=n;i++)//循环输出
  26.     {
  27.                 printf("%d ",a[i]);
  28.     }
  29.         sleep(100000);
  30.         return 0;
  31. }
复制代码



有图有真相:

继续更新。。。

1.png (26.55 KB, 下载次数: 3)

1.png
36#
发表于 2013-7-22 21:19:10 | 只看该作者
{:soso_e127:}
35#
发表于 2013-5-30 23:00:44 | 只看该作者
1. 算法不依赖于语言,所以说某种语言有几种排序方法是不好的表达
另外如果把有文献讨论过的排序算法都算上,那么除了珠排序这种需要特殊计算机的排序算法,其他算法C都能很容易实现

2. 桶排序和基数排序是不同的两种算法,楼主给出的应该算是一种桶排序

3. 选择排序不是常用算法,因为太慢了
除非是在特别的计算机模型上(比如主存读取速度远远大于写入速度的硬件上)

4. 数组大小不是C语言的限制,而是特定环境下堆栈大小的限制,放在所有函数之外就不会发现这种问题。

5. 冒泡不一定比选择慢,对于一个长度为n的数组排序,冒泡的最佳情况是n-1次比较,而选择是(n+1)(n-2)次

6. 还有一种有名的排序算法没有提到,Shell sort(希尔排序)
34#
发表于 2012-11-16 20:46:54 | 只看该作者
=student= 发表于 2012-11-16 20:45
??

刚才在修改,SORRY~现在好了
33#
 楼主| 发表于 2012-11-16 20:45:52 | 只看该作者
henk 发表于 2012-11-16 20:35
[ 本帖最后由 henk 于 2012-11-16 20:44 编辑 ]\n\n[ 本帖最后由 henk 于 2012-11-16 20:37 编辑 ]

#inc ...

??
32#
发表于 2012-11-16 20:35:12 | 只看该作者
[ 本帖最后由 henk 于 2012-11-16 20:46 编辑 ]\n\n

#include<stdio.h>
/*快速排序*/
int quick_sort(int *a, int n, int left, int right)
{
    int s, i, j;
    int temp;
    if(left < right)
       {
        s = a[left];
        i = left;
        j = right + 1;
        while(1)
           {
            while(i + 1 < n && a[++i] > s);
            while(j - 1 > -1 && a[--j] < s);
            if(i >= j)
           {
                break;
            }
            temp = a;
            a = a[j];
            a[j] = temp;
        }
        a[left] = a[j];
        a[j] = s;
        quick_sort(a, n, left, j - 1);
        quick_sort(a, n, j + 1, right);
    }
    return 0;
}
int main()
{
    int i,n;
    int arr[n];
    printf("请输入一个整数:");
    scanf("%d",&n);
    printf("请输入%d个整数:",n);
    for(i = 0; i < n; i++)
    {
        scanf("%d",&arr);      
    }
    for(i = 0; i < n; i++)
    {
        printf("arr[%d]=%d\n", i, arr);
    }
    quick_sort(arr, n, 0, (n-1));
    printf("排序后:\n");
    for(i = 0; i < n; i++) {
        printf("arr[%d]=%d\n", i, arr);
    }

    sleep(10000);   
    return 0;
}
31#
 楼主| 发表于 2012-10-26 19:49:11 | 只看该作者
henk 发表于 2012-10-22 20:39
LZ,刚才试了下第一种排序,把代码完整复制下来,发现编译不了,截图如下,请问是什么问题呢

谢谢指正错误,敲代码是粗心了点,现已改正(:
30#
发表于 2012-10-26 11:14:30 | 只看该作者

非常不错!!!!!!!!!
29#
发表于 2012-10-26 11:14:03 | 只看该作者
非常不错!!!!!!!!!
28#
发表于 2012-10-22 20:39:02 | 只看该作者
LZ,刚才试了下第一种排序,把代码完整复制下来,发现编译不了,截图如下,请问是什么问题呢

点评

谢谢指正错误,敲代码是粗心了点,现已改正(:  发表于 2012-10-26 19:49

评分

参与人数 1啊哈币 +3 收起 理由
凡夫俗子 + 3 谢谢!

查看全部评分

27#
发表于 2012-10-22 20:33:14 | 只看该作者
顶,感谢版主的分享~
26#
发表于 2012-8-23 22:32:57 | 只看该作者
刚好对排序不熟,谢了。。。
25#
 楼主| 发表于 2012-8-12 13:06:46 | 只看该作者
哪位高手会快排的,麻烦贴一下,供大家学习学习
24#
 楼主| 发表于 2012-8-12 12:27:27 | 只看该作者
lin965639390 发表于 2012-8-12 12:22
高手啊,都看不懂是什么!

慢慢学,加油
23#
发表于 2012-8-12 12:22:17 | 只看该作者
高手啊,都看不懂是什么!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表