c++十大排序——选择排序

 算法基本知识铺垫

有些人可能不知道什么是稳定排序、原地排序、时间复杂度、空间复杂度,我这里先简单解释一下:

1、稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 仍然在 b 的前面,则为稳定排序

2、非稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 可能不在 b 的前面,则为非稳定排序。

3、原地排序:原地排序就是指在排序过程中不申请多余的存储空间,只利用原来存储待排数据的存储 空间进行比较和交换的数据排序。

4、非原地排序:需要利用额外的数组来辅助排序。

5、时间复杂度:一个算法执行所消耗的时间。

6、空间复杂度:运行完一个算法所需的内存大小

十大排序一览图

十大排序中的稳定排序

冒泡排序(bubble sort) — O(n2)

插入排序 (insertion sort)— O(n2)

归并排序 (merge sort)— O(n log n)

十大排序中的非稳定排序

     面试考察中一般问快排,选择,希尔,堆这几种非稳定排序

选择排序 selection sort)— O(n2)

希尔排序 (shell sort)— O(n log n)

堆排序 (heapsort)— O(n log n)

快速排序 (quicksort)— O(n log n)

选择排序的基本思想:


找到当前数字序列中最大(最小)的数,记录其所在位置,将其和最前面(最后面)的数进行交换,使最小(最大)的元素上浮(下沉)到本次排序的最前面(最后面),从而完成一趟(pass)排序。下一趟排序时,已经有序的元素不再参与。这样的话,n个元素需要进行n-1趟排序

#include<iostream>
using namespace std;

void selectSort(int nums[], int length) {
	int minIndex;
	for (int i = 0; i < length; i++) {
		minIndex = i;
		for (int j = i + 1; j < length; j++) {
			if (nums[j] < nums[minIndex]) {
				minIndex = j;
			}
		}
		swap(nums[i], nums[minIndex]);

	}
}

int main()
{
	int nums[9] = { 1,9,5,2,3,6,7,4,8 };
	selectSort(nums, 9);
	for (int i = 0; i < sizeof(nums)/sizeof(nums[0]); i++) {
		cout << nums[i] << " ";

	}
	
	return 0;
}

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值