排序算法分为五大类,一共是有九种,如下:
插入类:直接插入排序、折半插入排序、希尔排序
交换类:冒泡排序、快速排序
选择类:简单选择排序、堆排序
归并类:二路归并排序
基数类:多关键字排序
九种算法的时间复杂度、空间复杂度和稳定性小结如下:
本文放出交换算法的两种排序算法代码。
八种常用的排序算法代码可以到这里下载。
冒泡排序
void BubbleSort(int R[], int n) {
int i, j, temp, flag;
cout << endl << "冒泡排序:" << endl;
for (i = n - 1; i >= 1; --i) {
flag = 0;
for (j = 1; j <= i; ++j) {
if (R[j - 1] > R[j]) {
temp = R[j];
R[j] = R[j - 1];
R[j - 1] = temp;
flag = 1;
}
}
for (int k = 0; k < n; k++)
cout << R[k] << " ";
cout << endl;
if (flag == 0)
{
cout << endl;
return;
}
}
}
快速排序
void QuickSort(int R[], int low, int high) {
int temp, i = low, j = high;
if (low < high) {
temp = R[low];
while (i < j) {
while (j > i && R[j] >= temp)--j;
if (i < j) {
R[i] = R[j];
++i;
}
while (i < j && R[i] < temp)++i;
if (i < j) {
R[j] = R[i];
--j;
}
}
R[i] = temp;
for (int k = 0; k <=high; k++)
cout << R[k] << " ";
cout << endl;
QuickSort(R, low, i - 1);
QuickSort(R, i + 1, high);
}
}
总体
#include <iostream>
using namespace std;
void BubbleSort(int R[], int n) {
int i, j, temp, flag;
cout << endl << "冒泡排序:" << endl;
for (i = n - 1; i >= 1; --i) {
flag = 0;
for (j = 1; j <= i; ++j) {
if (R[j - 1] > R[j]) {
temp = R[j];
R[j] = R[j - 1];
R[j - 1] = temp;
flag = 1;
}
}
for (int k = 0; k < n; k++)
cout << R[k] << " ";
cout << endl;
if (flag == 0)
{
cout << endl;
return;
}
}
}
void QuickSort(int R[], int low, int high) {
int temp, i = low, j = high;
if (low < high) {
temp = R[low];
while (i < j) {
while (j > i && R[j] >= temp)--j;
if (i < j) {
R[i] = R[j];
++i;
}
while (i < j && R[i] < temp)++i;
if (i < j) {
R[j] = R[i];
--j;
}
}
R[i] = temp;
for (int k = 0; k <=high; k++)
cout << R[k] << " ";
cout << endl;
QuickSort(R, low, i - 1);
QuickSort(R, i + 1, high);
}
}
int main()
{
int A[8] = { 49,38,65,97,76,13,27,49 };
int n = 8;
int R[8];
cout << "原始数组:";
for (int k = 0; k < n; k++) {
R[k] = A[k];
cout << R[k] << " ";
}
cout << endl;
BubbleSort(R, n); //冒泡排序
cout << "原始数组:";
for (int k = 0; k < n; k++) {
R[k] = A[k];
cout << R[k] << " ";
}
cout << endl;
int low = 0, high = 7;
cout << "快速排序" << endl;
QuickSort(R, low, high); //快速排序
cout << endl;
return 0;
}
主要参考的书籍是《数据结构高分笔记》2021版