当前位置:网站首页>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
边栏推荐
猜你喜欢
随机推荐
分布式计算实验1 负载均衡
【selenium自动化】第四篇,结合testNg
ExoPlayer添加Ffmpeg扩展实现软解功能
53个全球免费学术资源数据库整理,查资料写论文必备【开学必备】
MySQL BIGINT 数据类型
fanuc机器人IO分配报警信号分配无效
学校申请链接
分布式计算实验4 随机信号分析系统
拒绝碰运气,导师人品这样了解!
科研绘图图表类型种类繁多,本文告诉你如何选择!
七夕专属程序员的浪漫
mysql锁机制
异常值 识别与处理方法
(19)[系统调用]SSTD hook 阻止关闭
【愚公系列】2022年07月 Go教学课程 027-深拷贝和浅拷贝
MYSQL JDBC图书管理系统
中职网络安全竞赛B模块新题
MATLAB版量化交易技术分析工具TA-Lib【不付费也可获取,不要被付费吓跑】
Amazon亚马逊 Vendor Central Label详解
串口监听 - 软件方案





![(19)[系统调用]SSTD hook 阻止关闭](/img/73/e9d591af366db17965d0bf1cf192b7.png)



