温故而知新:C++常用排序算法
想不想get新技能酷炫一下,今天图老师小编就跟大家分享个简单的温故而知新:C++常用排序算法教程,一起来看看吧!超容易上手~
template typename T
void SelectionSort(T arr[],int n)
{
int smallIndex; //表中最小元素的下标
int pass,j; //用来扫描子表的下标
T temp; //用来交换表元素的临时变量
//pass的范围是0~n-2
for (pass=0;passn-1;pass++)
{
//从下标pass开始扫描子表
smallIndex=pass;
//j遍历整个子表arr[pass+1]到arr[n-1]
for(j=pass+1;jn;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; //用于交换元素的临时变量
更多内容请看C/C++技术专题专题,或
while (leftPass=rightPass)
{
//从左边及右边开始扫描子表
smallIndex=leftPass;
largeIndex=rightPass;
//j和i遍历整个子表arr[LeftPass]~arr[rightPass]
for (i=leftPass+1;irightPass;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;jleftPass;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; //用于交换元素的临时变量
更多内容请看C/C++技术专题专题,或
//开始遍历过程,以下标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;ij;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;passn;pass++) //pass从后往后扩大0~n-1,以构成子表0~n-1,0~n-2,0~n-3..0~1
{
for (i=0;in-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;
}
更多内容请看C/C++技术专题专题,或