您的位置:首页 > 其它

N个大小不等的自然数排序,时间复杂度为O(n),空间复杂度为O(1)

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

// 计数排序.cpp : 定义控制台应用程序的入口点。
//有N个大小不等的自然数(1,2,3,…..N)请将它们从小到大排列。算法要求:时间复杂度为O(n),空间复杂度为O(1)

#include "stdafx.h"
#include <stdio.h>

void counting_sort(int A[],int N)
{
int C[100],i,j;
int B[100];
for(i=1;i<=N;i++)
C[i]=0;
for(j=0;j<N;j++)
C[A[j]]+=1;
for(i=2;i<=N;i++)
C[i]=C[i-1]+C[i];
for (j=N-1;j>=0;j--)
{
B[C[A[j]]]=A[j];
C[A[j]]-=1;
}
for(int k=0;k<N;k++)
A[k]=B[k+1];
}

void main()
{
int a[]={5,3,6,1,4,2,7};
int n=sizeof(a)/sizeof(a[0]);
for(int k=0;k<n;k++)
printf("%2d",a[k]);
printf("\n");
counting_sort(a,n);
for(int k=0;k<n;k++)
printf("%2d",a[k]);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐