排序算法之选择排序

选择排序也是一种简单直观的排序算法。它的工作原理很容易理解:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置;然后,再从剩余未排序元素中继续寻找最小(大)元素,放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

// 分类 -------------- 内部比较排序

// 数据结构 ---------- 数组

// 最差时间复杂度 ---- O(n^2)

// 最优时间复杂度 ---- O(n^2)

// 平均时间复杂度 ---- O(n^2)

// 所需辅助空间 ------ O(1)

// 稳定性 ------------ 不稳定

选择排序是不稳定的排序算法,不稳定发生在最小元素与A[i]交换的时刻。比如序列:{5, 8,5,2, 9 },一次选择的最小元素是2,然后把2和第一个5进行交换,从而改变了两个元素5的相对次序。

#include

usingnamespacestd;

voidexchange(intA[],inti,intj)//交换A[i]和A[j]

{

inttemp = A[i];

A[i] = A[j];

A[j] = temp;

}

intmain()

{

intA[] = {8,5,2,6,9,3,1,4,0,7};//从小到大选择排序

intn =sizeof(A) /sizeof(int);

inti, j, min;

for(i =0; i <= n -2; i++)//已排序序列的末尾

{

min = i;

for(j = i +1; j <= n -1; j++)//未排序序列

{

if(A[j] < A[min])//依次找出未排序序列中的最小值,存放到已排序序列的末尾

{

min = j;

}

}

if(min != i)

{

exchange(A, min, i);//该操作很有可能把稳定性打乱,所以选择排序是不稳定的排序算法

}

}

printf("选择排序结果:");

for(i =0; i < n; i++)

{

printf("%d ",A[i]);

}

printf("\n");

return0;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 总结一下常见的排序算法。 排序分内排序和外排序。内排序:指在排序期间数据对象全部存放在内存的排序。外排序:指在排序...
    jiangliang阅读 1,369评论 0 1
  • 概述:排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    每天刷两次牙阅读 3,742评论 0 15
  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 5,215评论 0 52
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好...
    依依玖玥阅读 1,271评论 0 2
  • 基本概念 在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮、一个文本标签、一个文本输入框、一...
    captain_Lu阅读 377评论 0 1