专治拖延症--选择排序

选择排序

来来来,看看,是不是被我高端大气上档次的标题忽悠进来了,既然来了,那么就花几分钟看看,可能你并不太关注的选择排序。

可能生活中大多数人都有选择困难症,一直拖拖拖,最后还是不知道选择那个。那么今天我就给大家分享一下数据结构中的选择排序,让你如何正确高效的对我们的数据做出正确的选择。

  • 基本思想:选择排序它就是每次从我们的序列中选择出一个最小或者最大的数放置我们的序列起始位置,直到数据全部有序。
  • 示意图

在这里插入图片描述
如上图所示,选择排序很简单
1、从无序序列中找到最小值下标
2、将最小值顺序放置序列开始
3、重复步骤直到序列有序

  • 具体代码实现
#include<iostream>
using namespace std;

//选择排序
//原理简述:遍历数组,每次从未排序区间找到一个最小值放到已排序区间,直到数组有序
//时间复杂度:O(n^2)   
//空间复杂度:O(1)
//稳定性:不稳定

//打印数组内容
void print(int array[], int size) {
	for (int i = 0; i < size; i++) {
		cout << array[i] << " ";
	}
	cout << endl;
}
//交换函数
void swap(int array[], int i, int j) {
	int tmp = array[i];
	array[i] = array[j];
	array[j] = tmp;
}


//直接选择排序  选择最小值放到前边
void SelectSort1(int array[], int size) {
	for (int i = 0; i < size; i++) {
		int min = i;
		for (int j = i + 1; j < size; j++) {
			if (array[min] > array[j]) {
				min = j;
			}
		}
		if (min != i) {
			swap(array, min, i);
		}
	}
}

//直接选择排序  选择最大值放到后边
void SelectSort2(int array[], int size) {
	for (int i = 0; i < size; i++) {
		int max = i;
		for (int j = i + 1; j < size; j++) {
			if (array[max] < array[j]) {
				max = j;
			}
		}
		if (max != i) {
			swap(array, max, i);
		}
	}
}


int main(void) {

	int array[] = { 9,5,2,7,3,8,6 };
	int size = sizeof(array) / sizeof(int);
	cout << "排序前:";
	print(array, size);
	cout << "升序排序后:";
	SelectSort1(array, size);
	print(array, size);
	cout << "降序排序后:";
	SelectSort2(array, size);
	print(array, size);
	system("pause");
	return 0;
}
  • 选择排序总结
  1. 直接选择排序非常好理解,但是效率不是很好。实际中很少使用
  2. 时间复杂度:O(N^2)
  3. 空间复杂度:O(1)
  4. 稳定性:不稳定

**注:**选择排序在一定程度上减少了交换数据的次数,相比于冒泡排序而言能快点,但相比于其它排序效率也并不是很高,也无法保证排序的稳定性。

猜你喜欢

转载自blog.csdn.net/qq_43503315/article/details/89475580