#include <iostream>
#include <stack>
using namespace std;
void swap(int &a, int &b)
{
int temp;
temp = a;
a = b;
b = temp;
}
/*
1、选择排序
基本思想:首先,选出最小的数放在第一位,然后选择第二小的数,放在第二位;以此类推,直到所有的数从小到大排列.
那么,对于大小为N的数组需要N-1轮选择过程。第i轮选取第i小的数,请将其放在第i个位置上。
不稳定
平均时间复杂度O(N^2)
最好情况O(N^2)
最坏情况O(N^2)
空间复杂度O(1)
*/
void select_sort(int a[], int n)
{
for(int i = 0; i < n-1; i++){//进行n-1轮选择,也就是i的取值为【0,n-2】
int min_index = i;
//记录第i小的数所在的索引
for(int j = i + 1; j < n; j++){
if(a[j] < a[min_index])
min_index = j;
}
if(i != min_index){//根据记录的第i小的数的索引,找到了第i小的数。然后将该数放到其正确位置。也就是第i个位置。
swap(a[i] , a[min_index]);
}
}
}
/*
2、冒泡排序
基本思想: 不断比较相邻的两个数,让较大的数不断地往后移。经过一番比较,就选出了最大的数。经过第二轮比较,就选出了次大的数。以此类推。
那么对于大小为N的数组,需要N-1轮比较。
平均时间复杂度O(N^2)
最好情况O(N)
最坏情况O(N^2)
空间复杂度O(1)
*/
void bubble_sort(int a[],int n)
{
//要进行N-1轮比较
bool is_sorted = true;
for(int i = 0; i < n-1; i++ )//[0,n-2]恰好n-1轮比较
{