再问一道C++的题目。 如何对n个数据进行从小到大的排序?

对两个或者三个数据的排列,我就知道怎么做,对n个数据,我想到用数组,但是想不出来怎么做,麻烦高人解答下,谢谢了!
还有,除了数组之外,看看还有没有其他的方式。

下面是一个排序的例子,你自己看一下:
#include<stdio.h>
void sort(int a[],int n)
{
int i;
int j;
int temp;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(a[i]>a[j])
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
}
int main()
{
int a[8]={1,4,6,8,7,5,3,2};
sort(a,8);
int i;
for(i=0;i<8;i++)
{
printf("%3d",a[i]);
}
getchar();
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-07-05
1.int a[10]
char c=’a’,d’g;
则a[g-c],a[‘d’-c],代表什么
2. #include<iostream.h>
void main()
{
Char s1[]=”01234567”,s2[10]=”01234567”;
Cout<<sizeof(s1)<<” “<<sizeof(s2)<<endl;
} 怎么结果是9 10 而不是9 9呢
3.i++<4 的意思是 i<4,再算i++么
另外,站长团上有产品团购,便宜有保证
第2个回答  2011-07-05
1.快速排序:
  #include <iostream.h>
  void run(int* pData,int left,int right)
  {
  int i,j;
  int middle,iTemp;
  i = left;
  j = right;
  middle = pData[left];
  do{
  while((pData[i]<middle) && (i<right))//从左扫描大于中值的数
  i++; 
  while((pData[j]>middle) && (j>left))//从右扫描大于中值的数
  j--;
  if(i<=j)//找到了一对值
  {
  //交换
  iTemp = pData[i];
  pData[i] = pData[j];
  pData[j] = iTemp;
  i++;
  j--;
  }
  }while(i<=j);//如果两边扫描的下标交错,就停止(完成一次)
  //当左边部分有值(left<j),递归左半边
  if(left<j)
  run(pData,left,j);
  //当右边部分有值(right>i),递归右半边
  if(right>i)
  run(pData,i,right);
  }
  void QuickSort(int* pData,int Count)
  {
  run(pData,0,Count-1);
  }
  void main()
  {
  int data[] = {10,9,8,7,6,5,4};
  QuickSort(data,7);
  for (int i=0;i<7;i++)
  cout<<data<<" ";
  cout<<"\n";
  }
这个问题真不用拿出来问,也真不需要高人才能解决追问

呵呵,我是初学者,对于我来说,比我强的,都是高人。

追答

那就好好把我给的参考资料里面的几种算法好好研究研究,体会一下各种排序算法的思想去吧

追问

好的,谢谢你。

参考资料:http://baike.baidu.com/view/297739.html?wtp=tt