分享
 
 
 

C++常用排序算法

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

//选择排序法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;

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有