四种常用的排序算法
#include <iostream>
using namespace std;
//冒泡排序 从小到大排序
void BubbleSort(int *arrs, int length)
{
//外层循环控制排序轮数
for (int i = 0; i < length - 1; i++)
{
for (int j = 0; j < length - 1 - i; j++)
{
if (arrs[j] > arrs[j + 1])
{
int temp = arrs[j];
arrs[j] = arrs[j + 1];
arrs[j + 1] = temp;
}
}
}
}
//简单选择排序
void SelectSort(int *arrs, int length)
{
//外层循环控制排序轮数
for (int i = 0; i < length - 1; i++)
{
int min_index = i;//找到未排序的最小数的索引
for (int j = 1 + i; j < length; j++)
{
if (arrs[j]<arrs[min_index])
{
min_index = j;
}
int temp = arrs[i];
arrs[i] = arrs[min_index];
arrs[min_index] = temp;
}
}
}
//插入排序
void InsertSort(int *arrs, int length)
{
//外层循环将每个元素依次遍历,第一个元素默认是有序,所以从第二个开始
for (int i = 1; i < length; i++)
{
//内层循环将当前正遍历的元素插入到已排序中的对应位置
for (int j = i - 1; j >= 0; j--)
{
if (arrs[i]<arrs[j])
{
int temp = arrs[j];
arrs[j] = arrs[i];
arrs[i] = temp;
}
}
}
}
//快速排序
void QuickSort(int *arrs, int left, int right)
{
int i, j, key;
if (left < right)
{
i = left;
j = right;
key = arrs[i];
while (i < j)
{
//开始寻找比key小的数
while (i < j && arrs[j] >= key)
j--;
//如果找到,则将arrs[j]放到arrs[i]处,arrs[i]的值保存在key中
if (i < j)
{
arrs[i] = arrs[j];
i++;
}
//开始寻找比key大的数
while (i < j && arrs[i] < key)
i++;
//如果找到,则将arrs[i]与key互换位置放到arrs[j]处
if (i < j)
{
arrs[j] = arrs[i];
j--;
}
}
arrs[i] = key;
QuickSort(arrs, left, i - 1);
QuickSort(arrs, i + 1, right);
}
}
int main()
{
int n;
int arr[6] = { 5,1,3,7,9,7 };
n = sizeof(arr) / sizeof(int);
//BubbleSort(arr, n);
//SelectSort(arr, n);
//InsertSort(arr, n);
QuickSort(arr, 0, n - 1);
for (int i = 0; i < n; i++)
{
cout << arr[i] << " ";
}
cout << endl;
return 0;
}