问题描述: int a[] = {15,14,15,18,16,17,14,17,15,15},要求对数组a进行排序,要求时间复杂度为O(N) 。
#include<iostream> #include<stdlib.h> using namespace std; void Sort(int arr[], size_t size) { //先找出最大值和最小值 int max = arr[0]; int min = arr[0]; for (size_t idx = 1; idx < size; ++idx) { if (max < arr[idx]) max = arr[idx]; if (min > arr[idx]) min = arr[idx]; } size_t new_size = max - min + 1; //大小为new_size的count数组记录数据出现的次数,count数组的下标+min==数据 int *count = new int[new_size]; memset(count, 0, sizeof(int)*new_size); for (size_t idx = 0; idx < size; ++idx) { count[arr[idx] - min]++; } //再根据count中数据出现次数将数据排列在arr中 size_t pos = 0; for (size_t idx = 0; idx < new_size; idx++) { while (count[idx]>0) { arr[pos] = idx + min; pos++; count[idx]--; } } delete[] count; } int main() { int arr[11] = { 15,14,15,18,16,17,14,17,15,15}; Sort(arr, sizeof(arr)/sizeof(arr[0])); system("pause"); return 0; }