冒泡排序算法的运作如下:
1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3. 针对所有的元素重复以上的步骤,除了最后一个。
4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
//
// bubbl.cpp
//
// Created by scandy_yuan on 12-12-27.
// Copyright (c) 2012年 Sam. All rights reserved.
//
#include <iostream>
using namespace std;
//交换函数
void s_swap(int * a,int * b){
int c = *a;
*a = *b;
*b = c;
}
//冒泡算法实现函数
void bubble(int data[],size_t size)
{
//size个数只需要比较size-1次即可
for(size_t i = 0;i<size-1;i++)
{
//size-1-i 是对冒泡的优化,减少比较次数
for(size_t j=0;j<size-1-i;j++)
{
if(data[j] > data[j+1])
s_swap(&data[j], &data[j+1]);
}
cout << "第" << i+1 << "次排序之后的顺序是:" << " ";
for (size_t k=0 ; k<size; k++) {
cout << data[k] << " ";
}
cout << endl;
}
}
int main(int argc, const char * argv[])
{
// insert code here...
//测试
int arr[5] = {2,1,5,4,3};
bubble(arr, 5);
return 0;
}
附带规则的冒泡排序算法
//
// bubbl.cpp
//
// Created by scandy_yuan on 12-12-27.
// Copyright (c) 2012年 Sam. All rights reserved.
//
#include <iostream>
usingnamespacestd;
//交换函数
void s_swap(int * a,int * b){
int c = *a;
*a = *b;
*b = c;
}
//升序
void compare_ascending(int& a,int& b){
if(a>b) s_swap(&a,&b);
}
//降序
void compare_descending(int& a,int& b){
if(a<b) s_swap(&a,&b);
}
//附带规则的冒泡算法实现函数
void bubble(int data[],size_t size,void (*compare)(int&,int&))
{
//size个数只需要比较size-1次即可
for(size_t i = 0;i<size-1;i++)
{
//size-1-i 是对冒泡的优化,减少比较次数
for(size_t j=0;j<size-1-i;j++)
{
compare(data[j],data[j+1]);
}
cout << "第" << i+1 << "次排序之后的顺序是:" << " ";
for (size_t k=0 ; k<size; k++) {
cout << data[k] << " ";
}
cout << endl;
}
}
int main(int argc, const char * argv[])
{
// insert code here...
//测试
int arr[5] = {2,1,5,4,3};
bubble(arr, 5,compare_descending);
return 0;
}
浙公网安备 33010602011771号