插入排序 稳定
void insertion_sort(vector<int> &v) {
for (int i = 1; i < v.size(); i++) {
int tmp = v[i];
int j = i-1;
while (j >= 0 && v[j] > tmp) {
v[j+1] = v[j];
j--;
}
v[j+1] = tmp;
}
}
int main() {
vector<int> s{10,3,2,1,5,6,7};
insertion_sort(s);
for (auto k : s) {
cout << k << ' ';
}
}冒泡排序 稳定
void bubble_sort(vector<int> &s) {
for (int i = 0; i < s.size()-1; i++) {
for (int j = 0; j < s.size()-i-1; j++) {
if (s[j] > s[j+1]) {
swap(s[j], s[j+1]);int partition(vector<int> &A, int p, int r) {
int x = A[r];
int i = p-1;
for (int j = p; j < r; j++) {
if (A[j] < x) {
i++;
swap(A[i], A[j]);
}
}
swap(A[i+1], A[r]);
return i+1;
}
void qs(vector<int> &A, int p, int r) {
if (p < r) {
int pivot = partition(A, p, r);
qs(A, p, pivot-1);
qs(A, pivot+1, r);
}
}
int main() {
vector<int> s{1,3,2,1,5,6,3};
//insertion_sort(s);
// bubble_sort(s);
qs(s,0,s.size()-1);
for (auto k : s) {
cout << k << ' ';
}
}} } }}int main() { vector<int> s{1,3,2,1,5,6,7}; //insertion_sort(s); bubble_sort(s); for (auto k : s) { cout << k << ' '; }}
快速排序 不稳定
int partition(vector<int> &A, int p, int r) {
int x = A[r];
int i = p-1;
for (int j = p; j < r; j++) {
if (A[j] < x) {
i++;
swap(A[i], A[j]);
}
}
swap(A[i+1], A[r]);
return i+1;
}
void qs(vector<int> &A, int p, int r) {
if (p < r) {
int pivot = partition(A, p, r);
qs(A, p, pivot-1);
qs(A, pivot+1, r);
}
}
int main() {
vector<int> s{1,3,2,1,5,6,3};
//insertion_sort(s);
// bubble_sort(s);
qs(s,0,s.size()-1);
for (auto k : s) {
cout << k << ' ';
}
}堆排序 不稳定
本文详细介绍了三种常见的排序算法:插入排序、冒泡排序和快速排序。通过具体的C++代码实现展示了每种算法的工作原理,并指出它们的稳定性特点。插入排序和冒泡排序保持了排序的稳定性,而快速排序则为不稳定排序。
1403

被折叠的 条评论
为什么被折叠?



