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]); }
相关文章推荐
- 有N个大小不等的自然数(1--N),请将它们由小到大排序。要求程序算法:时间复杂度为O(n),空间复杂度为O(1)。
- 排序1,2......n的无序数组,时间复杂度为o(n),空间复杂度为o(1)
- 将数组排序,数组中所有的负整数出现在正整数前面(时间复杂度为 O(n), 空间复杂度为 O(1)).
- LeetCode 148. Sort List--O(nlogn)时间复杂度和常数空间复杂度给链表排序
- ver[SIZE]保存的是[iBegin,iBegin+SIZE-1]区间的值,且无重复,请以O(N)时间复杂度和O(1)空间复杂度进行排序
- 实现一个排序算法,对0~n-1范围内的n个不重复的无序数组进行排序,时间复杂度为O(n),空间复杂度为O(1)。
- 七种排序方法(稳定性、空间复杂度、时间复杂度)分析总结
- 排序总结-时间复杂度和空间复杂度
- 算法稳定排序和非稳定排序、内排序和外排序、时间复杂度和空间复杂度
- C/C++小程序之排序:时间复杂的为O(n),空间复杂的为O(1)
- 时间复杂度和空间复杂度详解
- 返回数组中任意某个重复的数字--时间复杂度O(n)空间复杂度O(1)
- 时间复杂度和空间复杂度详解
- 时间复杂度和空间复杂度
- 对链表排序 要求时间 复杂度为 O(nlogn) 空间复杂度为常量
- 时间复杂度和空间复杂度详解
- LeetCode | 442. Find All Duplicates in an Array 限制时间复杂度O(n)空间复杂度O(1)的题
- 时间复杂度和空间复杂度的概念
- 时间复杂度和空间复杂度
- 桶排序 C# 0(1)的辅助空间,o(n)的时间复杂度进行排序,数据量有上万条。