/* * selection_sort.cpp * * Created on: 2016-3-17 * Author: LvLang */ //选择排序C++实现 #include <iostream> using namespace std; void swap(int *array,int i,int j) { int temp = array[i]; array[i] = array[j]; array[j] = temp; } /*选择排序解释: 核心思想就是把最大的/最小的选择出来放到最前面,然后在选择出第二大/第二小的放到第二位,以此类推 注意区别于冒泡排序的两两比较自动得出最大的在最后面。 快捷键tips:选定代码按tab键可以凸出代码,按shift+tab键可以凹进代码*/ void selection_sort(int *array,int len) { int i,j; for(i = 0;i <= len-2;i++) { int max_index = i; for(j = i+1;j <= len-1;j++) { if(array[j] > array[i]) { max_index = j; } } if(max_index != i) swap(array,i,max_index); } } void print(int *array,int len) { for(int i=0;i <= len-2;i++) cout<<array[i]<<" "; cout<<array[len-1]<<endl; } int main() { int len; cin>>len; int *array = new int[len]; for(int i=0;i<len;i++) { cin>>array[i]; } cout<<"排序之前数组:"<<endl; print(array,len); selection_sort(array,len); cout<<"排序之后数组:"<<endl; print(array,len); return 0; }
运行结果:
排序稳定性分析:
首先得知道什么是稳定性,也就是说如果序列存在两个相同的元素时,排序之后不改变它们的先后顺序,那么就是稳定的,否则就是不稳定的。
这里的选择排序因为是从最前往最后遍历的,并且代码中是要有大于当前最大(而不是等于)才交换,所以选择排序是稳定的。但是如果代码中等于当前最大就交换的话,那就是不稳定的。所以还得看具体的代码实现方式是怎样的。
改进:还有一种改进版的选择排序就是,选择最大元素的同时,把最小的也选出来,这样的话可以减少循环的次数,提高效率。