读算法导论日志:选择排序

这篇博客探讨了选择排序(SelectionSort)算法,它通过不断从无序区域选取最小元素并放入有序区域来排序。尽管其时间复杂度为O(n^2),但与插入排序不同的是,选择排序在所有情况下表现一致,不依赖于输入数据顺序。伪代码和C++实现代码也一并给出。
摘要由CSDN通过智能技术生成

SelectionSort同样是一种简单的算法,算法的实质就是不断地从数据的无序区当中拿出最小(大)的元素并将其依次排列。SelectionSort依然是一个复杂度为O(n^2)级别的算法,但是这个算法和之前的InsertionSort有一些区别,最主要的区别是比较的顺序,InsertionSort是将无序区的元素拿出放到有序区之中比较,而SelectionSort是将无序区的元素先比较再依次排列构成有序区,这样本质性的原因造成了SelectionSort的最好情况和最坏情况一样糟糕,而InsertionSortT(n)是与数据输入敏感的。

Pseudocode

/*

pseudocode

SELECTIONSORT(A)

for i = 1 to A.length - 1

key = i

for j = i to size

if A[key] > A[j]

key = j

exchange A[key] <-> A[i]

*/

下面是C++实现代码 如有不规范的地方望高人赐教

#include <iostream>
using namespace std;
void SelectionSort(int * A , int size);
/*
pseudocode
	SELECTIONSORT(A)
		for i = 1 to A.length - 1
			key = i
			for j = i to size
				if A[key] > A[j]
					key = j
			exchange A[key] <-> A[i]
*/
void SelectionSort( int *A, int size)
{
	
	for ( int i = 0; i < size - 1 ; i++)
	{
		int key = i ;	//key代表当前unsorted区之中秩最小的一个元素	
		for(int j = i ; j < size ; j++)//从unsorted区之中寻找到最小的元素 
			if(A[key] > A[j]) key = j;
		swap(A[key],A[i]);//找到最小元素之后依次排入sorted区 
	}
}

int ArryTest[] = { 5, 2, 4, 6, 1, 3};
int main() {
	
	for( int i = 0; i < 6 ;i ++)
		cout<<" " << ArryTest[i]<<" " ;
	SelectionSort(ArryTest, sizeof(ArryTest)/sizeof(ArryTest[1]));
	cout<<endl;
	for( int i = 0; i < 6 ;i ++)
		cout<<" " << ArryTest[i]<<" " ;
	return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值