之前涉及的堆排序就是選擇排序的一種,先進行選擇。
基本選擇排序:
最簡單,也是最沒用的排序算法,時間復雜度高并且還是不穩定的排序方法,項目中很少會用。
過程:
在一個長度為 N 的無序數組中,第一次遍歷 n-1 個數找到最小的和第一個數交換。
第二次從下一個數開始遍歷 n-2個數,找到最小的數和第二個數交換。
重復以上操作直到第 n-1 次遍歷最小的數和第 n-1 個數交換,排序完成。
特點:如果挨個進行選擇那么效率太慢。
算法優化:
默認開始的數是最大值最小值。比他大就更新,比他小也更新最大最小就可以了
注意一下這種情況:
當maxi和begin重合的時候交換之后maxi就被換走了,所以就需要使mini賦給maxi.
void SelectSort(int* a, int n)
{//數組需要使用地址形式。。假設一共有n個數據int begin = 0, end = n - 1;while (begin < end)//使用的是下標形式{int mini = begin, maxi = begin;for (int i = begin + 1; i <= end; ++i)//從第2個開始{if (a[i] > a[maxi]){maxi = i;}if (a[i] < a[maxi]){mini = i;} }Swap(&a[begin], &a[mini]);
if(maxi=begin)
maxi=mini;Swap(&a[end], &a[mini]);begin++;end--;}
}