选择排序实现

算法原理:所谓选择排序经过 n-1 次选择,当进行第 i 次选择时,是从第1个元素到第 n-i+1 的元素中选择最大的元素和第 n-i+1 个位置的元素交换,这样做比如第1次选择使得最大的元素到了数组的最后一个位置。注意哦,在选择排序中每次选择时只进行一次数据的交换。
算法代码:

#include <iostream>

 using namespace std;

 void swap(int &x,int &y)
 {
     int tmp = x;
     x = y;
     y = tmp;
 }

 void select_sort(int *arr,int n)
 {
     int i,j;
     for(i = n-1 ; i > 0 ; --i)
     {
         int tmp = 0;
         for(j = 1 ; j <= i ; ++j)
         {
             if(arr[j] >= arr[tmp])//这里的“=”是保证选择排序稳定的关键
             {
                 tmp = j;
             }
         }
         swap(arr[i],arr[tmp]);
     }
 }
 int main()
 {
     int arr[] = {2,1,4,3,8,7,5,6};
     select_sort(arr, 8);
     for(int i = 0 ; i < 8 ; ++i)
     {
         cout<<arr[i]<<" ";
     }
     cout<<endl;
     return 0;
 }

小结:选择排序的思路非常的简单,实现起来也不难。时间复杂度是O(n^2),选择排序也是稳定的排序,并且也是原地排序。选择排序的时间基本不受数据的影响,因为不管怎样都要进行n-1次选择排序。

上一篇:老男孩教育每日一题-第76天-说说/etc/profile /etc/bashrc .bashrc .bash_profile的区别


下一篇:[LeetCode] Wiggle Sort 摆动排序