当前位置:网站首页>O (n) complexity hand tear sorting interview questions | an article will help you understand counting sorting
O (n) complexity hand tear sorting interview questions | an article will help you understand counting sorting
2022-06-24 22:40:00 【Rice shrimp】
Count sorting And Radix sorting It is a special method of bucket sorting
It's really cold these two nights ...
that , What sort of sort is count sort ?
Counting sort is not a comparison sort algorithm , The algorithm is based on 1954 Year by year Harold H. Seward Put forward , The time complexity is reduced to O(N).
What are the steps of the counting sorting algorithm ?
- First step : Find out the largest element in the original array , Write it down as
max. - The second step : Create a new array
count, Its length ismaxAdd 1, The default values of its elements are 0. - The third step : Go through the elements in the original array , Take the elements in the original array as
countIndex of array , Take the number of elements in the original array ascountThe element value of the array . - Step four : Create an array of results
result, Starting indexindex. - Step five : Traverse
countArray , Find out that the element value is greater than 0 The elements of , Fill its corresponding index as the element value toresultGo to... In the array , Every time I deal with ,countThe value of this element in minus 1, Until the value of the element is not greater than 0, Sequential processingcountThe rest of the elements in . - Step six : Return result array
result.
It's abstract , Is there an easy way to understand , For example, illustration ?



But it's a waste of space !
Like a set of data {101,109,108,102,110,107,103}, The maximum value is 110, Follow the previous thinking , We need to create a length of 111 Count array of , But we can see , The one in front of it [0,100] That's a complete waste of space .
So how to optimize ?
Set the length of the array to max-min+1, That is to find out not only the maximum value , And find the minimum , Determine the length of the count array based on the difference between the two .
Let's make a joke and relax
Next, we will use the optimized idea to solve a common hand tearing sorting problem in the interview
Topic

Submission

Count sort code ( optimization )
class Solution {
public:
vector<int> sortArray(vector<int>& nums) {
int n = nums.size();
int max = nums[0], min = nums[0];
for(int i=1; i<n; i++) {
if(nums[i] > max) max = nums[i];
if(nums[i] < min) min = nums[i];
}
vector<int> count(max-min+1,0);
for(int i=0; i<n; i++)
count[nums[i]-min]++;
int k=0;
for(int i=0; i<max-min+1; i++) {
while(count[i]--) {
nums[k++] = i+min;
}
}
return nums;
}
};Corresponding cardinality sorting code
class Solution {
public:
vector<int> sortArray(vector<int>& nums) {
int n = nums.size();
int max = abs(nums[0]);
for(int i=1; i<n; i++)
if(max<abs(nums[i]))
max = abs(nums[i]);
int w = 0;
while(max>0) {
max /= 10;
w++;
}
int flag = 1;
vector<int> ans(n);
for(int i=0; i<w; i++) {
vector<int> bucket(19,0);
for(int j=0; j<n; j++) {
int temp = nums[j]/flag%10+9;
bucket[temp]++;
}
for(int j=1; j<19; j++)
bucket[j] += bucket[j-1];
for(int j=n-1; j>=0; j--) {
int temp = nums[j]/flag%10+9;
ans[--bucket[temp]] = nums[j];
}
nums.swap(ans);
flag*=10;
}
return nums;
}
};Refer to the boss's A paper to understand the counting and sorting algorithm ! - Programmer Ogawa - Blog Garden
边栏推荐
- 如何提取网页中的日期?
- 无心剑汉英双语诗003. 《书海》
- Leetcode: push domino (domino simulation)
- 详细了解Redis的八种数据类型及应用场景分析
- 1. fully explain the basic principles of IPSec
- 【軟件工程】期末重點
- Visitor tweets tell you which groups are consuming blind boxes
- ThreadLocal memory leak
- Ideal L9, new trend of intelligent cockpit
- MySQL + JSON = King fried!!
猜你喜欢
![[personal experiment report]](/img/04/c9e1bee19bff9d55b73c531f7b17f4.png)
[personal experiment report]

Embedded development: tips and tricks -- clean jump from boot loader to application code

Online filing process

VRRP skills topic

系统测试主要步骤

Docker installs redis-5.0.12. Detailed steps

电力系统| IEEE论文投稿流程

详细了解Redis的八种数据类型及应用场景分析

Can AI chat robots replace manual customer service?
CA Zhouji - the first lesson in 2022 rust
随机推荐
Power system | IEEE paper submission process
Redis-跳表
Yyds dry goods inventory junit5 learning II: assumptions class
CDN principle
NiO zero copy
ansible基本配置
如何提取网页中的日期?
Layer 2 and layer 3 forwarding principle based on VLAN
Introduction, installation and use of postman tool
2022-06-16 工作记录--JS-判断字符串型数字有几位 + 判断数值型数字有几位 + 限制文本长度(最多展示n个字,超出...)
AQS source code analysis
Heartless sword Chinese English bilingual poem 003 The sea of books
Code farmers should also understand the IPv4 subnet division of point networks
无心剑汉英双语诗003. 《书海》
Programmers become gods by digging holes in one year, carrying flags in five years and becoming gods in ten years
Creating files, recursively creating directories
Embedded development: tips and tricks -- clean jump from boot loader to application code
Genesis公链与美国一众加密投资者齐聚Consensus 2022
Visitor tweets tell you which groups are consuming blind boxes
04A interrupt configuration
