C++常用排序算法

原创 2003年11月06日 00:33:00

//选择排序法SelectionSort(int arr[],int n)
template <typename T>
void SelectionSort(T arr[],int n)
{
 int smallIndex;   //表中最小元素的下标
 int pass,j;       //用来扫描子表的下标
 T temp;           //用来交换表元素的临时变量

 //pass的范围是0~n-2
 for (pass=0;pass<n-1;pass++)
 {
  //从下标pass开始扫描子表
  smallIndex=pass;
  
  //j遍历整个子表arr[pass+1]到arr[n-1]
  for(j=pass+1;j<n;j++)

   //如果找到更小的元素,则将该位置赋值给smallIndex
   if(arr[j]<arr[smallIndex])
    smallIndex=j;

  //如果smallIndex和pass不在相同的位置
  //则将子表中的最小项与arr[pass]交换
  if(smallIndex!=pass)
  {
   temp=arr[pass];
   arr[pass]=arr[smallIndex];
   arr[smallIndex]=temp;
  }
 }
}

/************************************************************************
双端选择排序算法:是上面选择排序算法的变种,可以定位每个子表中最小和最大元素
并把它们分别放在子表的开头和结尾.
************************************************************************/
//双端选择排序算法函数deSelSort()的实现
template <typename T>
void deSelSort(T arr[],int n)
{
 int smallIndex,largeIndex;  //表中最小及最大元素的下标
 int leftPass=0,rightPass=n-1,i,j;     //用来从表左边及右边扫描子表的下标
 T temp;                        //用于交换元素的临时变量
 
 while (leftPass<=rightPass)
 {
  //从左边及右边开始扫描子表
  smallIndex=leftPass;
  largeIndex=rightPass;
  
  //j和i遍历整个子表arr[LeftPass]~arr[rightPass]
  for (i=leftPass+1;i<rightPass;i++)
   //如果找到更小的元素,则将该位置赋值给smallIndex
   if (arr[i]<arr[smallIndex])
    smallIndex=i;

  //如果smallIndex和leftPass不在相同的位置
  //则将子表中的最小项与arr[pass]交换
  if (smallIndex!=leftPass)
  {
   temp=arr[leftPass];
   arr[leftPass]=arr[smallIndex];
   arr[smallIndex]=temp;
  }


  for (j=rightPass-1;j>leftPass;j--)
   if(arr[j]>arr[largeIndex])
    largeIndex=j;

  if(largeIndex!=rightPass)
  {
   temp=arr[rightPass];
   arr[rightPass]=arr[largeIndex];
   arr[largeIndex]=temp;
  }

  //从两头收缩子表
  leftPass++;
  rightPass--;
 }
}

//自编冒泡法排序算法函数bubbleSort()的实现
template <typename T>
int bubbleSort(T arr[],int n)
{
 bool exchanged=false; //是否发生交换
 int i,j;              //用于遍历子表的下标
 T temp;               //用于交换元素的临时变量

 //开始遍历过程,以下标j构成子表,共有n-1个子表
 for (j=n-1;j>=0;j--) //j从后往前收缩n-1~0,以构成子表0~n-1,0~n-2,0~n-3..0~1
 {
  exchanged=false;
  for (i=0;i<j;i++) //遍历子表范围0~j
  {
   
   if (arr[i]>arr[i+1])
   {
    temp=arr[i];
    arr[i]=arr[i+1];
    arr[i+1]=temp;
    exchanged=true;
   }
  }
  if (!exchanged) return n-j-1;//如果在一次遍历中没有发生交换,则表示已经
                               //排序好,中断遍历过程
 }
 return n-1-j;
}


//冒泡法排序一般算法函数bubbleSortEx()的实现
template <typename T>
int bubbleSortEx(T arr[],int n)
{
 int i,pass;              //用于遍历子表的下标
 T temp;               //用于交换元素的临时变量

 //开始遍历过程,以下标j构成子表,共有n-1个子表
 for (pass=0;pass<n;pass++) //pass从后往后扩大0~n-1,以构成子表0~n-1,0~n-2,0~n-3..0~1
 {
  for (i=0;i<n-pass;i++) //遍历子表范围0~n-pass
  {   
   if (arr[i]>arr[i+1])
   {
    temp=arr[i];
    arr[i]=arr[i+1];
    arr[i+1]=temp;
   }
  }
 }
 return pass;
}

Objective-C实现常用的4种排序算法

OC实现的4种排序又来了,
  • u011619283
  • u011619283
  • 2014年04月17日 15:14
  • 6273

常见的几种内排序算法以及实现(C语言)

所有未排序的数组是经过检查合法的 主要的内排序包括冒泡、插入、希尔、堆排序、归并、快速、桶排序等 冒泡排序 冒泡排序应该是排序中最简单的算法了 主要思路如下: 1: 比较相邻的元素。如果第一个比第...
  • mcu_tian
  • mcu_tian
  • 2016年05月18日 18:43
  • 8753

视觉直观感受 7 种常用的排序算法

转载自 视觉直观感受 7 种常用的排序算法 其他 可视化对比十多种排序算法(C#版) 程序员必须知道的8大排序和3大查找 快速排序介绍快速排序是由东尼·霍尔所发展的一种...
  • gatieme
  • gatieme
  • 2016年03月12日 23:11
  • 1533

★常用内排序算法(C++代码)★

  • 2013年08月02日 15:29
  • 77KB
  • 下载

C++实现常用排序算法(快速,归并,选择,谢尔,堆排序)

  • 2012年04月09日 21:22
  • 2KB
  • 下载

C++常用排序算法

  • 2014年06月03日 11:45
  • 3KB
  • 下载

常用排序算法实现(C++)

/*排序算法*/ #include using namespace std; /*交换函数*/ void swap(int &a,int &b){ int temp=a; a=b; b=tem...
  • xl2432
  • xl2432
  • 2016年04月08日 17:03
  • 165

常用排序算法的c++实现(冒泡,选择,插入,堆,shell,快速,归并 )与sort()对比

偶然在书上看到句话,“为++程序员所津津乐道的一件事,就是sort()全面打败c语言的quicksort”,于是决定亲自测试下,正好将其他的排序也一并测试了,当做当初没写的补偿吧。     测试文件的...
  • coder_xia
  • coder_xia
  • 2011年07月12日 22:40
  • 2345

常用排序算法的C++实现

常用排序算法的C++实现
  • fengbingchun
  • fengbingchun
  • 2016年10月16日 18:38
  • 492

C++实现常用的排序算法

上一篇博文中提到 “快速寻找满足条件的两个数” 问题需要分别用到排序和查找两个函数,那么这里就系统地介绍下C++中一些常用的排序算法 (略去上一篇博文中的“快速排序”算法)。 一、交换排序 1. 冒泡...
  • u010801219
  • u010801219
  • 2013年06月25日 09:47
  • 860
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++常用排序算法
举报原因:
原因补充:

(最多只允许输入30个字)