int a[] = {12,13,12,13,19,18,15,12,15,16,17},要求对数组a进行排序,要求时间复杂度为O(N)
2017-08-05 10:25
309 查看
int a[] = {12,13,12,13,19,18,15,12,15,16,17},要求对数组a进行排序,要求时间复杂度为O(N)
根据时间复杂度要求,可以用鸽巢排序。所谓鸽巢排序, 也被称作基数分类, 是一种时间复杂度为(Θ(n))且在不可避免遍历每一个元素并且排序的情况下效率最好的一种排序算法. 但它只有在差值(或者可被映射在差值)很小的范围内的数值排序的情况下实用.
时间复杂度:O(N+n)(N :空间大小,n:元素大小)
空间复杂度:O(N)
算法分析:
1. 给定一个待排序 数组,创建一个备用数组(鸽巢),并初始化元素为0,备用数组的索引即是待排序数组的值。
2.把待排序数组的值出现的次数,放到“鸽巢”里(即用作备用数组的索引)。
3.把鸽巢里的值再依次送回待排序 数组。
根据时间复杂度要求,可以用鸽巢排序。所谓鸽巢排序, 也被称作基数分类, 是一种时间复杂度为(Θ(n))且在不可避免遍历每一个元素并且排序的情况下效率最好的一种排序算法. 但它只有在差值(或者可被映射在差值)很小的范围内的数值排序的情况下实用.
时间复杂度:O(N+n)(N :空间大小,n:元素大小)
空间复杂度:O(N)
算法分析:
1. 给定一个待排序 数组,创建一个备用数组(鸽巢),并初始化元素为0,备用数组的索引即是待排序数组的值。
2.把待排序数组的值出现的次数,放到“鸽巢”里(即用作备用数组的索引)。
3.把鸽巢里的值再依次送回待排序 数组。
void CountSort(int* array,int size) { int maxValue = array[0]; int minValue = array[0]; //找出最大元素和最小元素 for (int idx = 0; idx < size; idx++) { if (array[idx]>maxValue) maxValue = array[idx]; if (array[idx] < minValue) minValue = array[idx]; } int range = maxValue - minValue + 1; int* count = new int[range]; memset(count, 0, sizeof(int)*(range)); //统计相同元素出现的次数 for (int idx = 0; idx < size; idx++) { count[array[idx] - minValue]++; } //重新排序 int k = 0; for (int i = 0; i < range; i++) { for (int j = 0; j < count[i]; j++) { array[k] = minValue + i; k++; } } delete[] count; }
相关文章推荐
- |1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20所有这些字符串,把它的数字一个个剥离??
- 现有杂乱无序的1-20二十个数,这二十个数为:1,18,4,13,6,10,15,2,17,3,19,7,16,8,11,14,9,12,5,20,试依次求出相邻四个数之和的最大和最小值
- 要求对数组a进行排序,要求时间复杂度为O(N)
- 题目:输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。 要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。 例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,
- 180中国跳棋(12)186(13)191(14)196(15)201(16)205(17)209.5(18)
- 一个数组中只有0,1,2三个元素,进行排序,要求时间复杂度为O(n)
- 输入n个整数,编写函数实现以下操作,要求用指针实现: (1) 对n个数进行排序; (2) 将从指定位置的m个数逆序存放,例如:原序列为2,4,6,8,10,12,14,16,18,20,若要求把
- 实现一个排序算法,对0~n-1范围内的n个不重复的无序数组进行排序,时间复杂度为O(n),空间复杂度为O(1)。
- 一道看上去很吓人的算法面试题:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 一道看上去很吓人的算法面试题:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 一道看上去很吓人的算法面试题:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 一道看上去很吓人的算法面试题:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 程序员面试题精选(55):如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 一道看上去很吓人的算法面试题:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 一道看上去很吓人的算法面试题:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 一道看上去很吓人的算法面试题:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 一道看上去很吓人的算法面试题:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 如何对n个大小都小于100的整数进行排序,要求时间复杂度O(n),空间复杂度O(1)。