[选择排序] 时间复杂度O(n^2)

思路:从未排序的序列中,找到最小的元素,放到序列的起始位置,

再从剩下没排序的里面,找到最小的,放到已经排序的末尾。

 

原地操作几乎是选择排序的唯一优点,当空间复杂度要求较高时,可以考虑选择排序;实际适用的场合非常罕见。

# include <stdio.h>
#include <Eigen/Dense>
#include <iostream>
using namespace std;
using namespace Eigen;

int main(){
	cout<<"Insert Sorting: "<<endl;
	VectorXd v(8);
	v<<4,2,1,5,3,2,11,9;

	for(int i=0;i<8;i++){
		int tmp=i;

		for(int j=i+1;j<8;j++){
			if(v(j)<v(tmp))
			{
				tmp=j;
			}
		}
		if(tmp!=i){
			int tmp1=v(tmp);
			v(tmp)=v(i);
			v(i)=tmp1;
		}
	}

	cout<<v<<endl;

	return 0;
}

  

 

转载于:https://www.cnblogs.com/xy123001/p/6628832.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
常见的时间复杂度恒为 $O(n^2)$ 的排序算法有冒泡排序、插入排序和选择排序。 1. 冒泡排序 冒泡排序是一种简单直观的排序算法,其基本思想是不断交换相邻逆序的元素,将待排序序列中较大的数往后移动,较小的数往前移动。具体步骤如下: 1. 从头到尾遍历待排序序列,比较相邻两个元素的大小,如果它们的顺序错误,则交换它们的位置。 2. 重复执行上述操作,直到整个序列有序为止。 冒泡排序的时间复杂度为 $O(n^2)$,空间复杂度为 $O(1)$,是一种稳定排序算法。 2. 插入排序 插入排序的基本思想是将待排序的元素分为已排序区间和未排序区间。初始时,已排序区间只有一个元素,即第一个元素。每次从未排序区间中取出一个元素,插入到已排序区间的合适位置,直到未排序区间中元素全部排完为止。具体步骤如下: 1. 从第二个元素开始,依次将每个元素插入到它前面已排好序的序列中的正确位置。 2. 重复执行上述操作,直到所有元素均排序完成。 插入排序的时间复杂度为 $O(n^2)$,空间复杂度为 $O(1)$,是一种稳定排序算法。 3. 选择排序 选择排序的基本思路是每次从待排序序列中选择最小(或最大)的元素,放到序列的起始位置,然后再从剩余未排序元素中继续寻找最小(或最大)的元素,放到已排序序列的末尾。以此类推,直到所有元素均排序完成。具体步骤如下: 1. 在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置。 2. 从剩余未排序的元素中继续寻找最小(或最大)元素,放到已排序序列的末尾。 3. 重复执行上述操作,直到所有元素均排序完成。 选择排序时间复杂度为 $O(n^2)$,空间复杂度为 $O(1)$,是一种不稳定排序算法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值