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 }

 

 

    原文作者:算法小白
    原文地址: https://www.cnblogs.com/xingele0917/archive/2012/10/04/2711624.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞