1.简单选择排序
#include<iostream>
using namespace std;
void Swap(int arr[], int i, int j)
{
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
void selectSort(int arr[], int length)
{
if (arr==nullptr || length == 0)
return;
for (int i = 0; i < length; i++)
{
int min = i;
for (int j = i + 1; j < length; j++)
{
if (arr[min] > arr[j])
min = j;
}
if (i != min)
Swap(arr, i, min);
}
}
int main()
{
int arr[] = { 5,3,9,1,7,10,2 };
int length = sizeof(arr)/sizeof(int);
for (auto i : arr)
{
cout << i << " ";
}
cout << endl;
selectSort(arr, length);
for (auto i : arr)
{
cout << i <<" ";
}
return 0;
}
时间复杂度:平均情况O(N^2) 最好情况O(N^2) 最坏情况O(N^2)
空间复杂度:O(1)
稳定性:不稳定
2.堆排序
#include<iostream>
using namespace std;
//调整为一个堆
void Heap_Adjust(int* arr, int s, int m)
{
int temp = arr[s];
for (int j = 2 * s + 1; j <= m; j = 2 * j + 1)
{
if (arr[j] < arr[j + 1] && j < m)
{
j++;
}
if (temp > arr[j])
break;
arr[s] = arr[j];
s = j;
}
arr[s] = temp;
}
//堆排序
void Heap_Sort(int* arr, int length)
{
//创建一个大顶堆
for (int s = length / 2 - 1; s >= 0; s--)
{
Heap_Adjust(arr, s, length - 1);
}
//排序
for (int i = length - 1; i >= 1; i--)
{
swap(arr[0], arr[i]);
Heap_Adjust(arr, 0, i - 1);
}
}
int main()
{
int arr[] = { 49, 38, 65, 97, 76, 13, 27, 49, 10 };
int lengthgth = sizeof(arr) / sizeof(int);
for (auto x : arr)
{
cout << x << " ";
}
cout << endl;
Heap_Sort(arr, lengthgth);
for (auto a : arr)
{
cout << a << " ";
}
return 0;
}
时间复杂度:平均情况O(NlogN) 最好情况O(NlogN) 最坏情况O(NlogN)
空间复杂度:O(1)
稳定性:不稳定