c++选择排序

引言

选择排序就是找出每趟中的最小值或者最大值与对应趟数位置上的数值进行交换,从而排序,具体像序列: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 
#include 
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的控制台输出程序,其结构如下:
c++选择排序_第1张图片

运行效果

c++选择排序_第2张图片

你可能感兴趣的:(C++,选择排序)