注:
交换排序的基本方法是:两两比较待排序元素的关键字,并交换不满足次序要求的那些偶对,直到全部满足为止。
1冒泡排序:
冒泡排序的算法思想是:通过无序区中相邻元素关键字间的比较和位置的交换,使关键字最小的如气泡一般逐渐往上“漂浮”直至“水面”。
整个算法是从最下面的元素开始,对每两个相邻元素的关键字进行比较,且使关键字较小的元素换至关键字较大的元素之上,使得经过一趟冒牌排序后,关键字最小的元素到达最上端。接着,在再剩下元素中找关键字次小的元素,并把它换在第二个位置上。以此类推,一直到所有元素有序为止。
2例如:
先输入元素个数n,接着再输入n个元素,用冒泡排序将这n个数升序排列。
3.代码实现:
#include <iostream>
#define MaxSize 50
using namespace std;
void Bubble_Sort(int a[],int n)
{
int i,j,exchange,t;
for (i=0; i<n-1; i++)//n个数需要n-1趟排序
{
exchange = 0;
for (j=n-1; j>i; j--)//比较找出最小关键字的元素
{
if (a[j]<a[j-1])
{
t = a[j];
a[j] = a[j-1];
a[j-1] = t;
exchange = 1;
}
}
if (exchange == 0)//将a[k]与a[i]交换
{
return ;
}
}
}
int main()
{
int a[MaxSize];
int i,n;
cin>>n;
for (i=0; i<n; i++)
{
cin>>a[i];
}
Bubble_Sort(a,n);
for (i=0; i<n; i++)
{
cout<<a[i]<<" ";
}
return 0;
}
4.运行截图:
5.算法分析:
当初始序列为正序时,执行效率最高,此时的时间复杂度为O(n);当初始序列反序时执行效率最低,此时的时间复杂度为O(n^2),所以当初始数据序列越接近与正序,冒泡排序算法的性能越好。
提示:
冒牌排序算法中所产生有序区一定是全局有序的,也就是说,有序区中的所有元素的关键字一定大于或小于无序区中所有元素的关键字,这样每一趟排序都会将一个元素放到最终的位置上。