十大排序算法之(三)——选择排序

#1,选择排序简介

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面),我个人认为,按照数值来讲,这两个5没差别,所以这是不是决定这个算法不稳定还有待商榷。

#2,c++实现算法

#include<iostream>
#include<vector>

using namespace std;

void SelectSort(vector<int> &A);
void Select(vector<int> &A, int start, int stop);
void swapv(int &a, int &b);

int main(){
  vector<int> array = { 13, 19, 9, 5, 12, 8, 7, 4, 21, 2, 6, 11 };

  SelectSort(array);

  system("Pause");
  return 0;
}

void SelectSort(vector<int> &A){
  int len=A.size();

  for (int i = 0; i < len; i++)
  Select(A,i,len-1);

}

void Select(vector<int> &A, int start, int stop){
  int val=A[start];
  int len=A.size();
  int pos=0;

  for (int i = start; i < stop + 1; i++)
    if(A[i]<val){
      pos=i;
      val=A[i];
    }

  if(pos!=0)
  swapv(A[start],A[pos]);
}

void swapv(int &a, int &b){
  a=a+b;
  b=a-b;
  a=a-b;
}

#3,程序实现结果

时间: 2024-11-07 17:36:53

十大排序算法之(三)——选择排序的相关文章

排序算法七:选择排序之堆排序

排序算法七:选择排序之堆排序 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 引言 在我的博文<"主宰世界"的10种算法短评>中给出的首个算法就是高效的排序算法.本文将对排序算法做一个全面的梳理,从最简单的"冒泡"到高效的堆排序等. 上博文讲述了选择排序中的简单排序算法,本文介绍的堆排序是树性选择排序,采用堆这个数据结构来辅助排序. 排序相关的的基本概念 排序:将一组杂乱无章的数据按一定的规律顺次排列起来. 数据

排序算法之直接选择排序

直接选择排序是最简单直观的排序算法,属于选择排序. 直接算法的排序思路: 第一趟,程序将记录定位在第一个数据上,拿第一个数据依次和后面的数据进行比较,如果第一个数据大,交换,依次类推.经过第一趟比较,这组数据中最小的数据被选出来,排在第一位. 第二趟,程序将记录定位在第二个数据上,拿第二个数据依次和后面的数据比较,同样地,第二个数据大就交换.经过第二次比较,这轮最小的书被选出来,放在了第二位. 这样经过n-1次比较,这组数据就会变得有序.下面是直接选择的排序算法实现. /** * Created

排序算法系列——直接选择排序

前面两篇介绍了两种插入排序算法:直接插入排序和希尔排序.这篇介绍选择排序的一种:直接选择排序.从名字就可以看出直接选择排序与直接插入排序很相似,两者相同点在与都是将待排序序列分成有序区和无序区两部分,不同之处在于直接插入排序是从无序区选出一个插入到有序区合适的位置,而直接选择排序是从无序区选出最小的一个插入到有序区尾部,使得有序区保持有序. 基本思想: 一组待排序的数据,首先将其划分成两部分,一部分是已排好序的,另一部分是待排序的,然后依次从待排序部分取出最小的元素插入到已排序部分的尾部,保证有

排序算法2--简单选择排序、堆排序

一.简单选择排序和堆排序都属于选择排序 选择排序的思想是:每一趟从待排序的记录中选出关键字最小的记录,按顺序放在以排序的记录序列的后面,知道全部拍完为止. 二.简单选择排序(直接选择排序) 1.简单选择排序法是每次循环找出最值,循环结束后将最值调整到合适位置,交换的次数少. 每次找出当前无序队列中的最小的元素与第一个交换位置,再选择第二小的与第二个交换位置 原始队列:   3 5 6 2 4 1(最小元素1与3交换) 第一步: 1 5 6 2 4 3 (当前最小元素2与5交换) 第二步: 1 2

排序算法-冒泡排序(改),选择排序

上次说冒泡排序留下2个问题,一个是选择排序,一个是冒泡排序性能,这次会先说选择排序,然后说冒泡排序的优化 一选择排序 选择排序是一种简单直观的排序算法.它的工作原理是每一次从待排序的元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 流程: (有小到大排序) 第一轮 将0位元素与后续所有元素比较,将小的元素放在0位 第二轮 将1位元素与后续所有元素比较,将小的元素放在1位 ... 直到最后一位 代码上次已经贴出,这里复制下 1 public static vo

C语言中的排序算法--冒泡排序,选择排序,希尔排序

冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端 维基百科:点击打开链接 [cpp] view plain copy /* 用选择法对10个数进行排序 */ #include<stdio.h> void main() { int i,j,

算法_基本排序算法之冒泡排序,选择排序,插入排序和希尔排序

排序的元素实现了Comparable接口,以达到对于通用性. 最基础的排序是冒泡排序,下面是其思路: 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. 针对所有的元素重复以上的步骤,除了最后一个. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较. 下面是其实现代码: public class Maopao { public void sort(Comparable[]

排序算法(冒泡排序,选择排序,插入排序,快速排序)

数组的排序算法 选择排序 每次选择所要排序得数组中的最大值(由大到小排序,由小到大排序则选择最小值)的数组元素,将这个数组元组的值与最前面没有排序的数组元素进行交换, 第一次排序之后,最大的数字来到了第一位,再从第二个元素开始找,找到最大的元素,与第二个交换位置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 #include <std

经典排序算法回顾:选择排序,快速排序

//选择排序基本思想就是:一个一个最值查找,然后排序 //the simple insertSortWay void selectSort(int *a){ int n = strlen(a); for(int k; k<n; k++){ int l = k; for(int j; j<k; j++){ if(a[j] > a[l]){ l = j; } } int tmp = a[k]; a[k] = a[l]; a[l] = tmp; } } //the nice insertSor

排序算法 之 直接选择排序

上一篇我们记录了冒泡排序算法的实现,这次我们来看直接选择排序是如何实现的. 1.直接选择排序: 基本思想: 直接选择排序也是对被排序的序列进行n-1次遍历,与冒泡排序不同的是,它并不对本次遍历序列内的元素两两进行比较并根据比较的结果来决定是否交换,而是找出本次遍历的序列内元素的最小值,并插入本次遍历的开始位置,直至遍历完成序列有序,直接选择排序算法的时间复杂度为O(n2):: 代码实现: /// <summary> /// 直接选择排序 /// </summary> /// <