在几大排序算法中,冒泡排序是最简单容易实现的。
冒泡排序算法的运作如下:
- 从0~N-1比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 一轮比较后,最大的元素就到了N-1的位置了。
- N自减后重复步骤一
通俗的讲就是每一次冒泡就是将最大的元素移到最后面去
直接贴代码:
// Algorithm.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include
#include
#include
using namespace std;
#define ARRAYLEN 10 //数组个数
//Func:交换两个数的值
void Swap(int& nNumA, int& nNumB)
{
nNumA = nNumA^nNumB;
nNumB = nNumA^nNumB;
nNumA = nNumA^nNumB;
}
//Func:冒泡排序
void BubbleSort(int* nArray, int nArrayLen)
{
bool bOrder = false; //是否有序的标志位
for(int i = 0; i < nArrayLen; ++i)
{
bOrder = true;
for(int j = 1; j < nArrayLen - i; ++j)
{
if(nArray[j - 1] > nArray[j])
{
Swap(nArray[j - 1], nArray[j]);
bOrder = false;
}
}
if(bOrder) //已经有序 直接跳出循环
{
break;
}
int *pNum = nArray;
cout<<"\n第" <
<<"次冒泡:";="" while(pnum="" !="nArray" arraylen)="" {="" cout<<*pnum++="" <<"="" ";="" }="" cout<
<="" arraylen;="" ++i)="" narray[i]="rand()%100;" cout<
排序结果:
细心的朋友会发现,第六次冒泡后数组已经有序了,所以还有优化的空间,及在数组有序后跳出外层循环。
<<"次冒泡:";="" while(pnum="" !="nArray" arraylen)="" {="" cout<<*pnum++="" <<"="" ";="" }="" cout<
<="" arraylen;="" ++i)="" narray[i]="rand()%100;" cout<