• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
乐碎碎
程序媛想的事儿
博客园    首页    新随笔    联系   管理    订阅  订阅
N个大小不等的自然数排序,时间复杂度为O(n),空间复杂度为O(1)

有N个大小不等的自然数(1,2,3,…..N)请将它们从小到大排列。算法要求:时间复杂度为O(n),空间复杂度为O(1)。请简要说明你采用的排序算法并写出c的伪代码。

 1 // 计数排序.cpp : 定义控制台应用程序的入口点。
 2 //有N个大小不等的自然数(1,2,3,…..N)请将它们从小到大排列。算法要求:时间复杂度为O(n),空间复杂度为O(1)
 3 
 4 #include "stdafx.h"
 5 #include <stdio.h>
 6 
 7 void counting_sort(int A[],int N)
 8 {
 9     int C[100],i,j;
10     int B[100];
11     for(i=1;i<=N;i++)
12         C[i]=0;
13     for(j=0;j<N;j++)
14         C[A[j]]+=1;
15     for(i=2;i<=N;i++)
16         C[i]=C[i-1]+C[i];
17     for (j=N-1;j>=0;j--)
18     {
19         B[C[A[j]]]=A[j];
20         C[A[j]]-=1;
21     }
22     for(int k=0;k<N;k++)
23         A[k]=B[k+1];
24 }
25 
26 void main()
27 {
28     int a[]={5,3,6,1,4,2,7};
29     int n=sizeof(a)/sizeof(a[0]);
30     for(int k=0;k<n;k++)
31         printf("%2d",a[k]);
32     printf("\n");
33     counting_sort(a,n);
34     for(int k=0;k<n;k++)
35         printf("%2d",a[k]);
36 }

 

 

posted on 2012-10-04 18:49  xingle0917  阅读(944)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3