当前位置:网站首页>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
边栏推荐
- Chapter 10 project stakeholder management
- New features of go1.18: efficient replication, new clone API for strings and bytes standard library
- 第二批入围企业公示!年度TOP100智能网联供应商评选
- The ktp900f mobile download program of the fail safe mobile panel prompts that the download cannot be performed, and the target device is running or not in the transmission mode
- OA system -- save the verification code to session
- Huada 4a0gpio settings
- Virtual private network foundation
- seven
- Data communication foundation - Ethernet port mirroring and link aggregation
- 关于自动控制原理资料更新
猜你喜欢

ACL (access control list) basic chapter - Super interesting learning network

Description of software version selection of kt6368a Bluetooth dual-mode transparent chip

揭秘B站,程序员穿女装敲代码,效率更高是真的吗?

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

如何比较两个或多个分布:从可视化到统计检验的方法总结

网上立案流程

Yyds dry goods inventory junit5 learning II: assumptions class

VRRP skills topic

Row and column differences in matrix construction of DX HLSL and GL glsl

ThreadLocal内存泄漏问题
随机推荐
Tetris
无心剑汉英双语诗003. 《书海》
NIO多路复用之Selector的使用
Huada 4a0gpio settings
img2pdf
Idea close global search box
MySQL + JSON = King fried!!
Unable to use the bean introduced into the jar package
Servlet details
Technology Review: what is the evolution route of container technology? What imagination space is there in the future?
interrupt、interrupted 、isInterrupted 区别
Web攻击之CSRF和SSRF
一个女孩子居然做了十年硬件。。。
进程的通信方式
Servlet详解
Redis hop table
Visitor tweets tell you which groups are consuming blind boxes
NIO、BIO、AIO
Layer 2 and layer 3 forwarding principle based on VLAN
NIO、BIO、AIO
