排序算法-冒泡排序
Posted 梦想田园
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法-冒泡排序相关的知识,希望对你有一定的参考价值。
#include<iostream>using namespace std;
//冒泡排序
/*
冒泡排序的思想很简单,就是不断将最大的元素往后移动,第一次扫描,会将最大的元素移动到最后,然后再用类似的方式排序前n-1个元素。
当然冒泡排序实现可以通过递归实现,也可以通过循环迭代实现。
*/
//使用递归实现的冒泡排序
void BubbleSortByRecursion(int list[],int size)
if(size<=1)//当仅剩一个元素时无需排序
return;
for(int i=0;i<size-1;i++)//通过冒泡的形式,将最大的元素放到需要排序数组的最后边
if(list[i]>list[i+1])
int temp=list[i];
list[i]=list[i+1];
list[i+1]=temp;
BubbleSortByRecursion(list,size-1);//将剩下的未排序的数组进行排序
//使用迭代实现的冒泡排序
void BubbleSortByIteration(int list[],int size)
for(int i=size;i>0;i--)//要排序的元素个数不断减少
for(int j=0;j<i-1;j++)//将最大元素移动到要排序的部分的最后边
if(list[j]>list[j+1])
int temp=list[j];
list[j]=list[j+1];
list[j+1]=temp;
//冒泡排序的改进
/*
要知道冒泡排序的平均复杂度为O(n*n),可以通过一定的方式进行改善,如当某次排序移动元素的个数为0时,表示已经排好序,应停止。
*/
//优化后的冒泡排序
void BubbleSortOptimize(int list[],int size)
int nCount=0;
for(int i=size;i>0;i--)
nCount=0;
for(int j=0;j<i-1;j++)
if(list[j]>list[j+1])
int temp=list[j];
list[j]=list[j+1];
list[j+1]=temp;
nCount++;
if(nCount==0)//当移动次数为0时,排序停止
break;
//此外快速排序也是对冒泡排序的改进,通过比较用递归实现的冒泡排序和用递归实现的快速排序,就能明白这一点了
//快速排序可参看:http://blog.csdn.net/u010968153/article/details/51767726
int main()
int list[]=5,6,6,4,3,1,2,6,7,8;
BubbleSortOptimize(list,10);
for(int i=0;i<10;i++)
cout<<list[i]<<" ";
cout<<endl;
以上是关于排序算法-冒泡排序的主要内容,如果未能解决你的问题,请参考以下文章