只要涉及到数据,就会涉及到数据的排序问题,比如给你随机给你五个整数 3,1,2,5,4。让你从小到大进行排序,那我们该怎样才是实现对这些整数的排序呢 ?
答案是多种多样的,比如用
冒泡排序
、
选择排序
、堆排序、归并排序、
快速排序
等等,这些排序方法都可以实现对整数排序,而这篇文章要讲的就是
选择排序
The idea and process of selcet sort
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。
简单来说:选择排序就是经过一轮一轮的查找,每一轮都从待排序的元素中选择一个最小的(或最大的)元素,存放在起始位置,直接排序完成位置。
下面来说用选择排序对3,1,5,2,4进行排序(从小到大排序)
1 首先用一个变量minx记录3的下标,拿着minx对应的数字3和第二个数字1比较,发现1小,那数字1的下标存入minx中。
2 继续拿着minx的数字1和第三个数字5进行比较,发现5大于1,不做处理。
3 继续拿着minx的数字1和第四个数字2进行比较,发现2大于1,不做处理。
4 继续拿着minx的数字1和第五个数字4进行比较,发现4大于1,不做处理。
5 截止到现在为止,已经找到了最小数的下标minx,让这组数的第一个数和这个minx对应下标的值进行交换即可,这样就把最小的数放到了第一个位置,这时候这组数据变成了1,3,5,2,4
7 首先把第二个数的下标存入minx,拿着minx的数字3和第三个数字5进行比较,发现5大于3,不做处理
8 继续拿着minx的数字3和第四个数字2进行比较,发现3大于2,那就把3的下标存入到minx中
9 继续拿着minx的数字2和第五个数字4进行比较,发现4大于2,不做处理。
10
截止到现在为止,已经找到了最小数的下标minx,让这组数的第二个数和这个minx对应下标的值进行交换即可,这样就把最小的数放到了第二个位置,这时候这组数据变成了1,2,5,3,4。
How to implement select sort in code
通过上面对3,1,5,2,4的排序过程讲解,我们需要明确已知的三个条件:
#include<iostream>
using namespace std;
void SelectionSort(int arr[],int len)
{
int temp;
for(int i=0;i<len-1;i++)
{
int minx=i;
for(int j=i+1;j<len;j++)
{
if(arr[j]<arr[minx])
minx=j;
}
temp=arr[i];
arr[i]=arr[minx];
arr[minx]=temp;
}
}
void printf(int arr[],int len)
{
for(int i=0;i<len;i++)
cout<<arr[i]<<" ";
cout<<endl;
}
int main()
{
int arr[]={3, 44,38, 5,47,15,36,26,27,2 ,46,4 ,19,50,48};
int len=15;
SelectionSort(arr,len);
printf(arr,len);
return 0;
}