C++11写算法之选择排序
选择排序,顾名思义,指从数组后面将最小的值找出来,然后与最前面(指当前位置)值进行交换。
时间复杂度:O(n^2)
空间复杂度:O(1)
此处应用了C++11的auto , lambda , static_assert 。
show me the code !
- // #if __cplusplus < 201103L
- // #error "must be compiled under c++11 support platform!!!"
- // #endif
- #include <iostream>
- #include <algorithm>
- #include <iterator>
- #include <cassert>
- using namespace std;
- void Swap(int& a, int& b)
- {
- int tmp = a;
- a = b;
- b = tmp;
- }
- void SelectSort(int varList[], const int size)
- {
- if (!varList || size <= )
- {
- return;
- }
- for (int i = ; i < size; i++)
- {
- int swapPos = i;
- for (int j = i; j < size; j++)
- {
- if (varList[swapPos] > varList[j])
- {
- swapPos = j;
- }
- }
- if (i != swapPos)
- {
- Swap(varList[i], varList[swapPos]);
- }
- }
- }
- void test()
- {
- //case counter
- int testCase = ;
- //sort function object
- auto sortFunc = SelectSort;
- //show case result lambda function
- auto showFunc = [&testCase](const char* caseDescription){cout << "case[" << testCase++ << "]\t(" << caseDescription << ") \t\tok " << endl; };
- cout << "test begin : " << endl << endl;
- //case empty list
- {
- sortFunc(nullptr, );
- showFunc("case empty list");
- }
- //case wrong size
- {
- int nTestList[] = { , , , , , , , , , };
- sortFunc(nTestList, );
- showFunc("case wrong size");
- }
- //case size == 1
- {
- int var = ;
- int varList[] = { var };
- sortFunc(varList, );
- assert(var == varList[]);
- showFunc("case size == 1");
- }
- //case normal sort
- {
- int varList[] = { , , , , , , , , , };
- const int size = sizeof(varList) / sizeof(int);
- const int resultList[] = { , , , , , , , , , };
- static_assert(sizeof(varList) == sizeof(resultList), "size of varList is not equal with resultList!!");
- sortFunc(varList, size);
- for (int i = ; i < size; i++){ assert(varList[i] == resultList[i]); }
- showFunc("case normal sort");
- }
- //case sorted list
- {
- int varList[] = { , , , , , , , , , };
- const int size = sizeof(varList) / sizeof(int);
- const int resultList[] = { , , , , , , , , , };
- static_assert(sizeof(varList) == sizeof(resultList), "size of varList is not equal with resultList!!");
- sortFunc(varList, size);
- for (int i = ; i < size; i++){ assert(varList[i] == resultList[i]); }
- showFunc("case sorted list");
- }
- cout << endl << "test done ! " << endl << endl;
- }
- int main(int argc, char* argv[])
- {
- test();
- return ;
- }
C++11写算法之选择排序的更多相关文章
- Java中的经典算法之选择排序(SelectionSort)
Java中的经典算法之选择排序(SelectionSort) 神话丿小王子的博客主页 a) 原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕.也就是:每一趟 ...
- java结构与算法之选择排序
一 .java结构与算法之选择排序(冒择路兮快归堆) 什么事选择排序:从一组无序数据中选择出中小的的值,将该值与无序区的最左边的的值进行交换. 简单的解释:假设有这样一组数据 12,4,23,5,找到 ...
- 【DS】排序算法之选择排序(Selection Sort)
一.算法思想 选择排序是一种简单直观的排序算法.它的工作原理如下: 1)将序列分成两部分,前半部分是已经排序的序列,后半部分是未排序的序列: 2)在未排序序列中找到最小(大)元素,放到已排序序列的末尾 ...
- Python排序算法之选择排序定义与用法示例
Python排序算法之选择排序定义与用法示例 这篇文章主要介绍了Python排序算法之选择排序定义与用法,简单描述了选择排序的功能.原理,并结合实例形式分析了Python定义与使用选择排序的相关操作技 ...
- Java实现 蓝桥杯VIP 算法提高 选择排序
算法提高 选择排序 时间限制:1.0s 内存限制:256.0MB 选择排序 问题描述 排序,顾名思义,是将若干个元素按其大小关系排出一个顺序.形式化描述如下:有n个元素a[1],a[2],-,a[ ...
- 八大排序算法~简单选择排序【记录下标k变量的作用】
八大排序算法~简单选择排序[记录下标k变量的作用] 1,思想:打擂台法,数组中的前n-1个元素依次上擂台"装嫩",后边的元素一个挨着一个不服,一个一个上去换掉它 2,优化:通过记录 ...
- 排序算法总结------选择排序 ---javascript描述
每当面试时避不可少谈论的话题是排序算法,上次面试时被问到写排序算法,然后脑袋一懵不会写,狠狠的被面试官鄙视了一番,问我是不是第一次参加面试,怎么可以连排序算法都不会呢?不过当时确实是第一次去面试,以此 ...
- JavaScript ,Python,java,Go系列算法之选择排序
常见的内部排序算法有:插入排序.希尔排序.选择排序.冒泡排序.归并排序.快速排序.堆排序.基数排序等. 用一张图概括: 选择排序 选择排序是一种简单直观的排序算法,无论什么数据进去都是O(n2) ...
- 秒懂算法2——选择排序(C#实现)
算法思路: 每趟走访元素揪出一个最小(或最大)的元素,和相应位置的元素交换.(用数组{6,9,13,2,4,64} 举例) {},{6 9 13 [2] 4 64} //第一趟,揪出2 {2} ...
随机推荐
- Heartbleed漏洞利用程序
#!/usr/bin/python # Quick and dirty demonstration of CVE-2014-0160 by Jared Stafford (jspenguin@jspe ...
- openstack学习笔记(一)-openstack的基础知识
一.OpenStack的基础知识 openstack是一个由NASA(美国国家航空航天局)和Rackspace合作研发并发起的,以Apache2.0许可证(兼容GPLv3以及DFSG)授权的自由软件和 ...
- mybatis 一对多
person package com.kerwin.mybatis.pojo; import java.util.List; public class Person { private int id; ...
- UNIX管道符
在Unxi操作系统中,标准输入和标准输出是外壳程序中可以单独使用的两个独立流.但是有时候系统工程师需要让某些特定的输入源不起作用.当系统工程师在开发一些实用的脚本程序的过程中,经常需要用到. 一. ...
- LoadRunner测试AJAX
什么是AJAX? Ajax, shorthand for Asynchronous JavaScript and XML, is a web development technique for cre ...
- C++第4次实验(基础班)—循环结构程序设计
此次上机中的4个题目项目6.项目7(选1)必做.其他2两题可从剩下的项目中选,也可从项目7中选. [项目1:利用循环求和]求1000以内全部偶数的和(答案:250500) 要求:请编出3个程序来,分别 ...
- varchar2 和varchar区别
1.varchar2把所有字符都占两字节处理(一般情况下),varchar只对汉字和全角等字符占两字节,数字,英文字符等都是一个字节:2.VARCHAR2把空串等同于null处理,而varchar仍按 ...
- 一站式学习Wireshark(转载)
一站式学习Wireshark(一):Wireshark基本用法 2014/06/10 · IT技术 · 4 评论 · WireShark 分享到: 115 与<YII框架>不得不说的故事— ...
- SSH——增删改的实现二
二.批量删除 逻辑删除取派员,将取派员的deltag改为“1” 1. 为“作废”按钮绑定事件 //批量删除取派员 function doDelete(){ //获得选中的行 var rows = $( ...
- AspectJ 是什么
http://www.blogjava.net/hwpok/archive/2008/06/28/211312.html 1. 序 Aspect Oriented Programming (AOP)是 ...