- <span style=“font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);”>一.基本概念</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">一.基本概念</span>
冒泡排序,即对相邻两个数进行比较,如果反序就交换位置,直到整个序列没有出现反序为止。
二.C++实现
(1).最基础的实现,对数组A中每一个相邻元素进行比较。
- void Bubble_sort(SortArray *A , int n)
- {
- int i , j , temp;
- for (i = 0 ; i < n-1 ; i++)
- {
- for (j = i+1; j < n ; j ++)
- {
- if ((*A)[i] > (*A)[j])
- {
- temp = (*A)[i];
- (*A)[i] = (*A)[j];
- (*A)[j] = temp;
- }
- }
- }
- }
void Bubble_sort(SortArray *A , int n)
{
int i , j , temp;
for (i = 0 ; i < n-1 ; i++)
{
for (j = i+1; j < n ; j ++)
{
if ((*A)[i] > (*A)[j])
{
temp = (*A)[i];
(*A)[i] = (*A)[j];
(*A)[j] = temp;
}
}
}
}
(2)冒泡排序顾名思义,像冒泡一样有大到小,上述算法只是简单地将相邻两个数进行了比较和替换位置,从该算法中不难看出,存在很多多余的比较和替换位置。
- void Bubble_sort(SortArray *A , int n)
- {
- int i , j , temp;
- for (i = n -1 ; i >=0 ; i–)
- {
- for (j = 0; j < i ; j ++)
- {
- if ((*A)[j] > (*A)[j+1])
- {
- temp = (*A)[j+1];
- (*A)[j+1] = (*A)[j];
- (*A)[j] = temp;
- }
- }
- }
- }
void Bubble_sort(SortArray *A , int n)
{
int i , j , temp;
for (i = n -1 ; i >=0 ; i--)
{
for (j = 0; j < i ; j ++)
{
if ((*A)[j] > (*A)[j+1])
{
temp = (*A)[j+1];
(*A)[j+1] = (*A)[j];
(*A)[j] = temp;
}
}
}
}
(3)(2)中的算法是正宗的冒泡排序算法,但如果数组中本来就存在一定长度的有序数组,上述算法仍需对数组循环遍历一遍。所以增加一个flag对上述算法进行优化。
- void Bubble_sort(SortArray *A , int n)
- {
- int i , j , temp;
- bool flag = true;
- for (i = n -1 ; i >=0 ; i–)
- {
- flag = false;
- for (j = 0; j < i ; j ++)
- {
- if ((*A)[j] > (*A)[j+1])
- {
- temp = (*A)[j+1];
- (*A)[j+1] = (*A)[j];
- (*A)[j] = temp;
- flag = true;
- }
- }
- if (flag == false) break;
- }
- }
void Bubble_sort(SortArray *A , int n)
{
int i , j , temp;
bool flag = true;
for (i = n -1 ; i >=0 ; i--)
{
flag = false;
for (j = 0; j < i ; j ++)
{
if ((*A)[j] > (*A)[j+1])
{
temp = (*A)[j+1];
(*A)[j+1] = (*A)[j];
(*A)[j] = temp;
flag = true;
}
}
if (flag == false) break;
}
}
算法的时间复杂度为0(N2).
最后附上主程序:
- #include <stdio.h>
- #include “stdafx.h”
- #include <iostream>
- using namespace std;
- #define MAX 100
- typedef int SortArray[MAX];
- int _tmain(int argc, _TCHAR* argv[])
- {
- int n ;
- SortArray A;
- cout<<”/**冒泡排序**/\n”
- <<”请输入数组个数”<<endl;
- cin>>n;
- cout<<”请输入待排序数组”<<endl;
- for (int i = 0 ; i < n ; i++)
- {
- cin>>A[i];
- }
- cout<<”正在排序请稍后…..”<<endl;
- Bubble_sort(&A,n);
- cout<<”排序结果如下…..”<<endl;
- for (int i = 0 ; i < n ; i++)
- {
- cout<<A[i]<<endl;
- }
- system(”pause”);
- return 0;
- }
#include <stdio.h>
include "stdafx.h"
include <iostream>
using namespace std;
define MAX 100
typedef int SortArray[MAX];
int _tmain(int argc, _TCHAR* argv[])
{
int n ;
SortArray A;
cout<<"/冒泡排序/\n"
<<"请输入数组个数"<<endl;
cin>>n;
cout<<"请输入待排序数组"<<endl;
for (int i = 0 ; i < n ; i++)
{
cin>>A[i];
}
cout<<"正在排序请稍后....."<<endl;
Bubble_sort(&A,n);
cout<<"排序结果如下....."<<endl;
for (int i = 0 ; i < n ; i++)
{
cout<<A[i]<<endl;
}
system("pause");
return 0;
}