背景
网上很多排序算法运行结果是错误的,本小白很苦恼,因此花了一些时间汇总了各个算法,并给出main函数调用方式,本文仅为了分享个人学习记录,如有错误,欢迎讨论!
本文的代码均已在Visual Studio测试过,可放心ctrl C!具体每种算法的介绍与展开,后续有时间进行补充!
1.冒泡排序
void bubbleSort(int Array[], int ArraySize) {
for (int i = 0; i < ArraySize - 1; i++) {
for (int j = 0; j < ArraySize - 1 - i; j++) {
if (Array[j] > Array[j + 1]) {
int Temp = Array[j];
Array[j] = Array[j + 1];
Array[j + 1] = Temp;
}
}
}
}
1.1.冒泡排序优化版
void bubbleSortAdvanced(int Array[], int ArraySize) {
bool SwapFlag = false;
for (int i = 0; i < ArraySize - 1; i++) {
SwapFlag = false;
for (int j = 0; j < ArraySize - 1 - i; j++) {
if (Array[j] > Array[j + 1]) {
swap(Array[j], Array[j + 1]);
SwapFlag = true;
}
}
if (SwapFlag == false)
break;
}
}
2.选择排序
void selectSort(int Array[], int ArraySize) {
for (int i = 0; i < ArraySize - 1; i++) {
int Index = i;
for (int j = i + 1; j < ArraySize; j++) {
if (Array[j] < Array[Index])
Index = j;
}
swap(Array[Index], Array[i]);
}
}
3.插入排序
void insertSort(int Array[], int ArraySize) {
for (int i = 1; i < ArraySize; i++) {
for (int j = i; j > 0; j--) {
if (Array[j - 1] > Array[j])
swap(Array[j - 1], Array[j]);
else
break;
}
}
}
4.快速排序
void quickSort(int Array[], int ArraySize, int Left, int Right) {
if (Left >= Right) return;
int i = Left, j = Right, Base = Array[Left];
while (i < j) {
while (Array[j] >= Base && i < j)
j--;
while (Array[i] <= Base && i < j)
i++;
if (i < j)
swap(Array[i], Array[j]);
}
Array[Left] = Array[i];
Array[i] = Base;
quickSort(Array, ArraySize, Left, i - 1);
quickSort(Array, ArraySize, i + 1, Right);
}
5.希尔排序
void shellSort(int Array[], int ArraySize) {
for (int i = 0; i < ArraySize; i++) {
for (int j = i - 1; j >= 0 && Array[j + 1] < Array[j]; j--) {
swap(Array[j], Array[j + 1]);
}
}
}
6.归并排序
void mergeArray(int Array[], int ArraySize, int Left, int Middle, int Right) {
int LeftSize = Middle - Left + 1, RightSize = Right - Middle;
// 创建临时数组来保存左右两部分的数据
vector<int> LeftTempArray(LeftSize), RightTempArray(RightSize);
// 将数据复制到临时数组中
for (int i = 0; i < LeftSize; ++i)
LeftTempArray[i] = Array[Left + i];
for (int j = 0; j < RightSize; ++j)
RightTempArray[j] = Array[Middle + 1 + j];
// 将临时数组中的数据按顺序合并到原始数组中
int i = 0, j = 0, k = Left;
while (i < LeftSize && j < RightSize) {
if (LeftTempArray[i] <= RightTempArray[j]) {
Array[k] = LeftTempArray[i];
i++;
}
else {
Array[k] = RightTempArray[j];
j++;
}

最低0.47元/天 解锁文章
1119

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



