来源:http://blog.csdn.net/morewindows/article/details/6657829
本文是对其理解
#include <iostream>
using namespace std;
//常规,假定序列中不存在有序的
void bubble1(int arr[], int n)
{
for (int i = 0; i < n-1; ++i)
for (int k = 1; k < n-i; ++k)
if (arr[k-1] > arr[k])
swap(arr[k-1], arr[k]);
}
/*
*优化:对有序的部分,不遍历;只对无序的部分操作
*
* 若遍历一趟,却没有元素的交换,
* 则说明任意相邻元素是满足升序关系的
* 即余下部分是有序的
*/
//用flag标记:余下部分是否无序?
void bubble2(int arr[], int n)
{
bool flag = true;
int i = 0;
while(flag)
{
flag = false;
for (int k = 1; k < n-i; ++k)
if (arr[k-1] > arr[k])
{
swap(arr[k-1], arr[k]);
flag = true;
}
++i;
}
}
//用flag标记:从0~flag之间是无序的
void bubble3(int arr[], int n)
{
int flag = n;
int i, j;
while(flag > 0)
{
i = flag;
flag = 0;
for (int j = 1; j < i; ++j)
if (arr[j-1] > arr[j])
{
swap(arr[j-1], arr[j]);
flag = j;
}
}
}
void print(int arr[], int n)
{
for (int i = 0; i < n; ++i)
{
cout << arr[i] << " ";
}
cout << endl;
}
int main(int argc, char const *argv[])
{
int test[] = {9, 8, 7, 6, 5, 1,2,3,4};
// bubble1(test, 9);
// bubble2(test, 9);
bubble3(test, 9);
print(test, 9);
return 0;
}