1、代码
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int arr[5] = {2, 10, 7, 32, 24};
//计算数组元素个数
int leng = sizeof(arr) / sizeof(arr[0]);
//內嵌的排序函数sort,但需要包含头文件algorithm
sort(arr, arr + 5);
cout << "(函数实现)sort_arr: ";
for (int i = 0; i < leng; i++)
{
cout << arr[i] << " ";
}
cout << endl;
//选择排序(复杂度N²)
//数组第一个位置的数与后面所有位置的数做比较,只要比它小,就互换位置,经过一轮比较,最小的数就排在了第一位。同样的方法再排第二位,第三位。。。。
arr[0] = 2;
arr[1] = 10;
arr[2] = 7;
arr[3] = 32;
arr[4] = 24;
for (int i = 0; i < leng - 1; i++)
{
for (int j = i + 1; j < leng; j++)
{
if (arr[j] < arr[i])
{
int swap = arr[i];
arr[i] = arr[j];
arr[j] = swap;
}
}
}
cout << "(选择排序)Select_sort_arr: ";
for (int i = 0; i < leng; i++)
{
cout << arr[i] << " ";
}
cout << endl;
//冒泡排序(复杂度N²)
//从左到右不断交换相邻逆序的元素,在一轮的循环之后,可以排序的最大元素上浮到右侧
arr[0] = 2;
arr[1] = 10;
arr[2] = 7;
arr[3] = 32;
arr[4] = 24;
int Bubble = 0;
while (Bubble == 0)
{
for (int i = 0; i < leng - 1; i++)
{
Bubble = 1;
if (arr[i] > arr[i + 1])
{
int swap = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = swap;
Bubble = 0;
}
}
}
cout << "(冒泡排序)Bubble_sort_arr: ";
for (int i = 0; i < leng; i++)
{
cout << arr[i] << " ";
}
cout << endl;
//插入排序(复杂度N²)
//按顺序从数组中提取数值key,如果key比前一个数小,就把key插到这个数前面,同时key再与前面的作比较,再继续插入。
arr[0] = 2;
arr[1] = 10;
arr[2] = 7;
arr[3] = 32;
arr[4] = 24;
for (int i = 1; i < leng; i++)
{
int key = arr[i];
while (i > 1 && key < arr[i - 1])
{
arr[i] = arr[i - 1];
arr[i - 1] = key;
i--;
}
}
cout << "(插入排序)insert_sort_arr: ";
for (int i = 0; i < leng; i++)
{
cout << arr[i] << " ";
}
cout << endl;
//希尔排序(复杂度n^(3/2))
//希尔排序是插入排序的改良版,就是在插入排序之前对数组做预处理分组,而且是两两分组,而这两个元素之间的跨度,称为希尔排序的增量,通过调整增量,最后增量为1,排序完成
arr[0] = 2;
arr[1] = 10;
arr[2] = 7;
arr[3] = 32;
arr[4] = 24;
int gap = leng / 2;
while (gap >= 1)
{
for (int i = gap; i < leng; i++)
{
if (arr[i - gap] > arr[i])
{
int swap = arr[i - gap];
arr[i - gap] = arr[i];
arr[i] = swap;
}
}
gap = gap/2;
}
cout << "(希尔排序)Shell_sort_arr: ";
for (int i = 0; i < leng; i++)
{
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
2、运行结果
(函数实现)sort_arr: 2 7 10 24 32
(选择排序)Select_sort_arr: 2 7 10 24 32
(冒泡排序)Bubble_sort_arr: 2 7 10 24 32
(插入排序)insert_sort_arr: 2 7 10 24 32
(希尔排序)Shell_sort_arr: 2 7 10 24 32