引言
选择排序就是找出每趟中的最小值或者最大值与对应趟数位置上的数值进行交换,从而排序,具体像序列:2,5,4,3,8若按照从小到大的顺序选择排序,总共5个元素,需要进行5-1趟操作,第一趟找出2,5,4,3,8中的最小值2与第一个位置上的数进行交换变为2,5,4,3,8,第二趟在剩下的元素5,4,3,8中找到最小值3,与第二个位置上的元素5交换,整体变为,2,3,4,5,8,第三趟在剩下的三个元素4,5,8中找出最小值4,与第三个位置上的元素进行交换变为:2,3,4,5,8,第四趟在剩下的元素5,8中找到最小值5与第四个位置上的元素交换位置,变为2,3,4,5,8,至此完成了选择排序,这里对于最后一个元素无需进行上述的操作。若按照从大到小的顺序选择排序,每一趟找出的应是最大值。
示例
下面实现按照从小到大的顺序选择排序。代码如下:
SelectSort.cpp
// SelectSort.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
using namespace std;/************************************************************************/
/* 功能:选择排序(从小到大) 2,5,4,3,8功能函数:void swap(int *p1,int *p2) 交换两个数的值void selectSort(int *parr,int n) 选择排序void printArr(int *parr,int n) 输出数组中的值*/
/************************************************************************/void swap(int *p1,int *p2)
{int temp;temp = *p1;*p1 = *p2;*p2 = temp;
}void selectSort(int *parr,int n)
{for(int i = 0; i < n-1; ++i){int min = parr[i];//默认每一趟第一个值为最小值for(int j = i; j < n; ++j)//获取该趟最小值{if (parr[j] < min){swap(parr[j],min);}}if(min != parr[i]){swap(parr[i],min);//最小值与对应趟的位置上数值交换} }
}void printArr(int *parr,int n)
{for(int i = 0;i < n ; ++i){cout<<parr[i]<<"\t";}
}int _tmain(int argc, _TCHAR* argv[])
{int array[] = {2,5,4,3,8};printArr(array,5);cout<<endl;selectSort(array,5);printArr(array,5);cout<<endl;system("pause");return 0;
}
项目是基于vs2010的控制台输出程序,其结构如下: