再问一道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

再问一道C++的题目。 如何对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,...

C++之如何将N个实数由大到小排序
回答:n个实数用数组a描述。 本例提供用选择排序方法与冒泡排序方法分别实现n个实数由大到小排序的函数搜索。 算法一:选择排序。 选择排序需反复进行求最大值与交换两个数这两种住房基本操作。 对a[o]、a[1]、…、a[n一1]由大到小排序:先求所有数的最大值,然后将最大值与a[o]进行交换;...

c++如何对N个数字随机排序后并输出
int a[10]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9};srand(time(0));for (int i=9; i>0; --i){ int idx = rand()%i;if (idx == i) continue;int tmp=a[idx];a[idx] = a[i];a[i] = tmp;}

c++中如何编一个程序,输入n个数,去掉最大最小数,求剩下数的平均...
} printf("max %f min %f average %f\\n", max, min, (sum-max-min)\/(n-2));return 0;}

腾讯笔试题求助:c++数数的问题,比如一个数组112222555...如何统计不同...
数组为array[],array中共有num个数,的话:int i;int count = 0;for(i = 0; i < num; i++){ if(array[i] > count) count = array[i]; a[array[i]-1][1]++;}for(i = 0; i < count; i++) a[i][0] = i+1; 无需排序 ...

...字符串)和成绩,如何根据给定名字的字典序从小到大排序
如果使用c++的话,首先定义一个类为学生类 class Student { String name;int score[];} 初始化之后,首先按照名称对student进行排序,在将score[]中的成绩按照大小进行排序

C++中如何表示从2到10?
从P开始,先与()结合,说明P是一个函数。然后进入()里面,与int结合,说明函数有一个整型变量参数。然后再与外面的结合,说明函数返回的是一个指针。之后到最外面一层,先与[]结合,说明返回的指针指向的是一个数组。接着再与结合,说明数组里的元素是指针,最后再与int结合,说明指针指向的内容是整型数据。所以P是一...

如何用C++对一个文本文档里面的许多数据进行逐行读取,并放入数组中_百 ...
然后在下次非数字字符之前对逐个数字字符进行按值进位累加。若是要从任意一行开始读入的话,添加一个跳行函数就行了。如果你是用的清华版的那种C++教材,跳行函数在书中有的,我就不再赘述了。有了跳行函数,直接在主程序中添加一个循环,使用跳行函数就可以了。希望我的回答对你有帮助 ...

...要求这些整数按照从小到大的顺序存放在类中的数组中,
class IntegerArray { public:IntegerArray(){this->size = 0;} int size;int num[MAX_SIZE];int insert_num(int num);int bisearch_num(int num, int start, int end);int delete_num(int num);void traversal_nums(void);};int IntegerArray::insert_num(int num){ if(this->size >...

这道c++题目如何做?(题目:网线主管)
然后以厘米为单位,可切割的最大长度为100km=100000m=10000000cm 所以最直观的想法是从x=10000000递减 计算切割长度为x时,能得到的网线数是多少,是否不小于K 最终第一个满足条件的x即为所求 但这样时间复杂度为O(10^7)*O(N),而N最大为10^4,显然会超时 因此可以使用二分法优化,即先取可...

相似回答