【排序算法】选择排序(简单选择排序,堆排序)

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)
稳定性:不稳定

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值