当前位置:编程学习 > C/C++ >>

怎么用c++对随机的n个数排序和删除重复

追问:但那些数字是随机的, 我该怎么办 ?使他们 做到
排序和
删除重复
答案:
挨个的比较,使用“起泡法”的算法。至于重复的嘛,等拍序之后,相互对比相等的就可以删除掉了~
下面是百度上的起泡法介绍:
******************************************
起泡法是从一端开始比较的,第一次循环就是把最小数上升到第一位置,第二次循环就是把第二最小数上升到第二位置。如此循环实现数据的排序。那么我们是否可以找到最小数的同时找到最大数呢?当然可以。方法是在一端起泡时同时在另一端也进行起泡。即反向起泡。下面的程序段实现的是双向起泡:
  void Bubble2Sort(int* pData,int Count)
  {
  int iTemp;
  int left = 1;
  int right =Count -1;
  int t;
  do
  {
  //正向的部分
  for(int i=right;i>=left;i--)
  {
  if(pData {
  iTemp = pData;
  pData = pData[i-1];
  pData[i-1] = iTemp;
  t = i;
  }
  }
  left = t+1;
  //反向的部分
  for(i=left;i {
  if(pData {
  iTemp = pData;
  pData = pData[i-1];
  pData[i-1] = iTemp;
  t = i;
  }
  }
  right = t-1;
  }while(left<=right);
  }
  分析上面的程序段我们可以发现正向起泡时第一次循环找出了最小数,反向起泡第一次循环找到最大数。很显然在一次循环中即可以找到一个最小的数还可以找到一个最大的数,所以用双向冒泡排序的交换的次数减少了,从而达到了优化起泡法的作用

上一个:C、C++、C#那个更适合 初学 者 学习???
下一个:C++培训机构哪里好?如何选择正确的IT培训机构?

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,