直接選擇排序和直接插入排序類似,都將數據分為有序的區域和無序的區域。所不同的是直接插入排序是將無序區的第一個元素直接插入到有序區以形成一個更大的有序區,而直接選擇排序是從無序區選一個最小的元素直接放到有序區的最后(其實是將找到的最小元素與已排序序列緊鄰的元素交換,從而使得已排序序列增大1)。
~~~
void Swap(int &a, int &b) {
int tmp = a;
a = b;
b = tmp;
}
void SelectSort(int a[], int size) {
int i;
for (i = 0; i < size; ++i) {
int min_index = i;
int j;
for (j = i + 1; j < size; ++j)
if (a[j] < a[min_index])
min_index = j;
Swap(a[i], a[min_index]);
}
}
~~~
該排序算法用到了交換兩個數的函數。參考[這里](http://blog.csdn.net/u013074465/article/details/44342629)查看面試題“不借助其他變量,交換兩個數”
- 前言
- Josephus約瑟夫問題及其變種
- 鏈表的常見實現
- 二叉樹遍歷、插入、刪除等常見操作
- 二叉堆的插入刪除等操作C++實現
- 插入排序和希爾排序
- 堆排序
- 歸并排序及其空間復雜度的思考
- 快速排序的幾種常見實現及其性能對比
- 紅黑樹操作及實現
- 整數的二進制表示中1的個數
- 位操作實現加減乘除四則運算
- 冒泡排序的改進
- 直接選擇排序
- 不借助變量交換兩個數
- 基礎排序算法總結
- AVL樹(Adelson-Velskii-Landis tree)
- avl樹的C++實現
- 動態規劃之鋼條分割
- hash函數的基本知識
- 動態規劃:求最長公共子串/最長公共子序列
- 最長遞增子序列
- 稱砝碼問題
- 汽水瓶
- 字符串合并處理(二進制位的倒序)
- 動態規劃:計算字符串相似度
- m個蘋果放入n個盤子
- 生成k個小于n的互不相同的隨機數
- 棧和隊列的相互模擬
- 字符串的排列/組合
- KMP(Knuth-Morris-Pratt)算法
- n個骰子的點數
- 位運算的常見操作和題目