/*
Name: 排序函数(递归选择法)
Copyright: tarena
Author: 王钟沛
Date: 07-11-06 14:58
Description:对一个整型数组中的n个数进行排序(升序)
*/
#include <iostream>
using namespace std;
#include <algorithm> //swap函数所需要的头文件
void mysort(int *p,int n)//对数组p中的前n个元素进行排序
{
if(n<=1) return ;//递归出口 ,如果只有一个元素,就不用排序了
int max_number=0,max_index=0;//分别用来记录最大值和最大值所在位置的索引
for (int i=0 ; i<n ; i++)
{
if(max_number<p[i])//保存最大值的相关信息
{
max_number = p[i];
max_index = i;
}
}
if(max_number!=p[n-1])
swap(p[max_index],p[n-1]);//调用了swap()函数,把最大的数交换到数组当前最后一位
mysort(p,n-1);//递归调用,对n-1个元素进行排序
}
int main()
{
int index=0,number=0;
int *arrary=NULL; //用与动态创建数组,没学过的同学可以定义一个比较大的数组
cout << "请输入数组中有多少个元素:" << endl;
cin >> index;
cout << "请输入要对前多少个元素进行排序:" << endl;
cin >> number;
if ( number > index )//防止越界,保证要排序的元素个数小于或者等于数组长度
{
cout << "越界!请检查您的输入" << endl;
return 0;
} //下面这么做有点不规范。应该申请动态数组的时候用一个常量作为长度
arrary = new int [index]; //动态申请一个index大小的内存空间
for( int i=0;i<index;i++)
{
cout << "请输入第" << i+1 << "个元素的值:";
cin >> arrary[i];
}
mysort(arrary,number);
cout << "排序后的结果为:" << endl;
for ( int i=0;i<number;i++)
cout << arrary[i] << ' ';
cout << endl;
system("PAUSE");//dev_c++的暂停输出语句,cfree不需要
return 0;
}