选择排序,所有排序算法中最简单的一个,不是嘛,如果有哪本编程书中没有直接或者间接的含有这个算法,真的换一本吧:),在此仅以此博客记录一下,我所认识的选择排序。
选择排序,为什么取这个名?
之所以叫选择排序,是因为每次都是要从剩余的序列中选择一个最大(最小)的元素将其放在最终位置(有序时元素所在的位置)
选择排序的思路(从小到大排序)
1:从序列的第K+1个元素开始,找到序中最小的元素(K=0)
2:将最小的元素与第K个元素进行比较,如果比第K个元素小,则进行交换,否则不交换
3:从第K+1个元素开始,重复上述过程
时间复杂度
循环计算变量从0开始,则算法每次循环选择一个最小值均需要的比较次数为n-i-1,故总共的比较次数为n(n-1)/2,同时由于每次循环都有可能做交换操作,帮最多进行的交换操作次数为n-1次,帮时间复杂度为O(n^2)
空间复杂度
空间复杂度为0(1),需要一个交换变量,下面可以看到,可以连这1空间的变量都不需要,将代码一与代码三结合,但会影响效率
算法的稳定性
选择排序是不稳定的,你想想这样的一个序列5,5,2,从小往大排序好,第一5就在第二个5的后面,所以是不稳定的。
最容易想到的方法
void SelectSort(int *a ,int N)
{
int temp;
for(int i=0;i<N;i++)
for(int j=i+1;j<N;j++)
{
if(a[i]>a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
效率高一点的算法
void SelectSort(int *a ,int N)
{
int tmp;
for(int i=0;i<N;i++)
{
int min=i;
for(int j=i+1;j<N;j++)
if(a[j]<a[min])
min=j;
if(i!=min)
{
tmp=a[i];
a[i]=a[min];
a[min]=tmp;
}
}
}
效率再高一点的算法
void SelectSort(int *a ,int N)
{
for(int i=0;i<N;i++)
{
int min=i;
for(int j=i+1;j<N;j++)
if(a[j]<a[min])
min=j;
if(i!=min)
{
a[i]=a[i]^a[min];
a[min]=a[min]^a[i];
a[i]=a[min]^a[i];
}
}
}
分享到:
相关推荐
最快的排序算法 C语言最简单的排序算法冒泡排序并返回排序前索引序号,排序算法数据结构
在简单选择排序过程中,所需移动记录的次数比较少。最好情况下,即待排序记录初始状态就已经是正序排列了,则不需要移动记录。 最坏情况下,即待排序记录初始状态是按逆序排列的,则需要移动记录的次数最多为3(n-1...
一种最简单的选择排序算法,使用java语言实现,有很高的参考价值。
以从小到大排序为例,选择排序是从某一列数字当中选出最小的数字与第一个位置交换,在从第二个数字开始寻找第二小的数字与第二个位置交换,以此类推,直至最后一个数字交换完毕,排序完成
四种简单的排序算法,简单排序,快速选择排序,希尔排序
最快的排序算法 最简单的排序算法,排序算法数据结构(01)
最快的排序算法 最简单的排序算法,排序算法数据结构(02)
最快的排序算法 最简单的排序算法 (1),排序算法数据结构
最快的排序算法 最简单的排序算法(续),排序算法数据结构
Java语言实现的简单比较排序算法,代码里头有详细注释,注释皆为简单英文,因为这个算法比较简单,欢迎新手下载学习使用,欢迎后期的学习交流!
选择排序算法、冒泡排序算法和插入排序算法的时间复杂度为O(n2),写法简单,逻辑易懂,但算力性价比不高,不适用于数据量较大时使用。 合并排序算法和快速排序算法采用了采用分治法、递归的方法,将时间复杂度降为...
我们今天所介绍的这个选择排序也是简单排序中的一种,不过比起泡排序的效率要高,并且也比较容易实现。 这些常用的排序方法多见诸于C/C++方面的资料中,如果要在vfp中实现这些排序方法,原理是一样的,只是在代码...
选择排序法的概念简单,每次从未排序部份选一最小值,插入已排序部份的后端,其时间主要花费于在整个未排序部份寻找最小值,如果能让搜寻最小值的方式加 快,选择排序法的速率也就可以加快,Heap排序法让搜寻的路径...
排序是算法中很重要的一种。冒泡排序是排序算法之一,是很简单的一种,比较适合初学者哦~
最简单的微信小程序拖拽排序列表
采用java语言实现的排序排序,通俗易懂。
选择排序(Selection Sort) 是另一种简单的排序算法,它通过多次遍历数组,在每一轮中选择最小的元素,并将其放置在已排序部分的末尾。选择排序的实现同样通过嵌套的循环来找到最小元素并进行交换。 这些示例代码...
3简单选择排序 * 基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换; 然后在剩下的数当中再找最小的与第二个位置的数交换, 如此循环到倒数第二个数和最后一个数比较为止。 4快速排序 * ...
这是简单的快速排序和加入各种改进算法的后的代码都有,比如快排入栈操作等
简单插入排序思想,将一个无序的数组,想象成由两部分组成,一部分为有序列,一部分为无序列,初始时,有序列为数组第一个元素,无序列为第一个元素之后的元素组成。每次从无序列中取第一个数插入到有序列中,有序列...