当前位置:网站首页>The sorting algorithm including selection, bubble, and insertion
The sorting algorithm including selection, bubble, and insertion
2022-08-04 06:55:00 【SUNNY_CHANGQI】
Three sorting algorithms
The selection algorithm
From my views, I think the best way to implement the selection algorithm is to think the procedures to execute the steps of the selection algorithm.
The description of the selection algorithm
Suppose there is a unsorted array with integers. The intuition for this algorithm recrusively pick out the minimum value from the decreasing size of the array and put it on the first position of the array. The concrete steps are as follows.
- From the A[0, n-1], pick out the minimum entry from the array and put it in the position indexed by 0;
- From the A[1, n-1], pick out the minimum entry from the array and put it in the position indexed by 1;
- From the A[2, n-1], pick out the minimum entry from the array and put it in the position indexed by 2;
- ⋯ \cdots ⋯
- From the A[n-1, n-1], pick out the minimum entry from the array and put it in the position indexed by n-1
The key points to implement it
Variable 1:x:conrol starting point
variable 2:y:control traverse
key technique: log minimum value by its index not value
The corresponding codes for this
#include <iostream>
#include <vector>
#include <ctime>
#include <cstdlib>
#include <algorithm>
using namespace std;
class Solution {
public:
vector<int> sortArray(vector<int>& nums) {
// select sort
vector<int> res(nums);
int n = res.size();
for (int i = 0; i < n; i++) {
int min_index = i;
for (int j = i+1; j < n; j++) {
if (res[j] < res[min_index]) min_index = j;
}
swap(res[i], res[min_index]);
}
return res;
}
};
int main() {
srand(time(NULL));
vector<int> nums;
// initialize nums 100 random numbers
for (int i = 0; i < 100; ++i) {
nums.push_back(rand() % 1000);
}
Solution s;
vector<int> res = s.sortArray(nums);
for (auto i : res) {
cout << i << " ";
}
cout << endl;
return 0;
}
The bubble sort
The intuition for this algorithm
the intutition: the opposite of the selection
primay technique: swap
The corresponding codes for this
#include <iostream>
#include <vector>
#include <ctime>
#include <cstdlib>
#include <algorithm>
using namespace std;
class Solution {
public:
vector<int> sortArray(vector<int>& nums) {
vector<int> res(nums);
int n = res.size();
/* bubble sort */
for (int i = n-1; i >= 0; i--) {
for (int j = i; j > 0; j--) {
if (res[j] < res[j-1]) swap(res[j], res[j-1]);
}
}
return res;
/*solution2*/
// for (int i = 0; i < n; i++) {
// for (int j = 0; j < n - i - 1; j++) {
// if (res[j] > res[j + 1]) {
// swap(res[j], res[j + 1]);
// }
// }
// }
// return res;
}
};
int main() {
srand(time(NULL));
vector<int> nums;
// initialize nums 100 random numbers
for (int i = 0; i < 100; ++i) {
nums.push_back(rand() % 1000);
}
Solution s;
vector<int> res = s.sortArray(nums);
for (auto i : res) {
cout << i << " ";
}
cout << endl;
return 0;
}
The insertion algorithm
#include <iostream>
#include <vector>
#include <ctime>
#include <cstdlib>
#include <algorithm>
using namespace std;
class Solution {
public:
vector<int> sortArray(vector<int>& nums) {
vector<int> res(nums);
int n = res.size();
/* insertion sort */
for (int i = 1; i < n; i++) {
for (int j = i; j > 0; j--) {
if (res[j] < res[j-1]) {
swap(res[j], res[j-1]);
}
}
}
return res;
for (int i = 1; i < n; i++) {
// int j = i;
// while (j > 0 && res[j] < res[j - 1]) {
// swap(res[j], res[j - 1]);
// j--;
// }
// }
// return res;
}
};
int main() {
srand(time(NULL));
vector<int> nums;
// initialize nums 100 random numbers
for (int i = 0; i < 100; ++i) {
nums.push_back(rand() % 1000);
}
Solution s;
vector<int> res = s.sortArray(nums);
for (auto i : res) {
cout << i << " ";
}
cout << endl;
return 0;
}
The corresponding results
5 31 43 58 59 79 89 111 123 129 154 158 160 173 182 190 201 203 208 209 209 210 227 228 243 249 250 254 255 267 270 270 303 312 332 345 363 387 395 400 426 443 444 446 451 481 482 488 489 493 505 507 534 544 586 587 596 598 609 610 614 619 639 642 676 691 693 716 718 727 732 746 754 756 776 810 814 814 815 839 848 857 880 881 899 924 933 942 945 951 954 955 957 966 969 976 990 991 992 994
边栏推荐
猜你喜欢
随机推荐
Distributed Computing Experiment 4 Random Signal Analysis System
npm包发布与迭代
likeshop外卖点餐系统开源啦100%开源无加密
玩转TypeScript对象、对象作为参数进行函数传递、接口和内置对象[无敌态]
【愚公系列】2022年07月 Go教学课程 027-深拷贝和浅拷贝
【学习笔记】状压dp
中职网络安全竞赛C模块MS17-010批量扫描
MMDeploy部署实战系列【第四章】:onnx,tensorrt模型推理
数据特征预处理——缺失值的查看方式及处理
一天学会JDBC03:Statement的用法
Use of MotionLayout
redis---分布式锁存在的问题及解决方案(Redisson)
2022爱分析· 银行数字化厂商全景报告
likeshop外卖点餐系统【100%开源无加密】
中断和异常的处理与抢占式多任务
国内外知名源码商城系统盘点
Distributed Computing MapReduce | Spark Experiment
有人试过用NPGsql驱动连接openGauss开发应用的吗?
The school to apply for link
Triton部署mmdeploy导出的TensorRT模型失败篇