wtxtools

C++博客 首页 新随笔 联系 聚合 管理
  11 Posts :: 8 Stories :: 2 Comments :: 0 Trackbacks

/*
  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;
}

posted on 2006-11-07 15:54 传统的浪漫 阅读(815) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理