冒泡排序主要思想是,依次比較分別獲得每趟中未排序的最大值或最小值
僞代碼:
BubbleSort(int *A,int n)
flag=1;
while flag //每次遍歷時,若存在逆序對,必須重新排序,直至全部有序爲止
flag=0
for i from N-1 to 1
if A[i-1]>A[i] //存在逆序對,則需要將標誌位標出
swap(A[i],A[i-1])
flag=1
這裏算法穩定,因爲>,如果改爲>=,則說明相等時也要交換,則會改變該算法的穩定性
這裏每次都要遍歷已經排好序的部分,可以稍作處理,用變量標記未排序部分的起始下標
BubbleSort1(int *A,int n)
flag=1;
i=0;
while flag
flag=0;
for j from N-1 to i+1
if(A[j]
#include<iostream>
#include<algorithm>
using namespace std;
void Print_Bubble(int *A, int n)
{
int i = 0;
for (i = 0; i < n; ++i)
{
if (i>0) cout << " ";
cout << A[i];
}
cout << endl;
}
int BubbleSort(int *A, int n)
{
int flag = 1;
int i = 0,k=0;
int j;
while (flag)
{
flag = 0;
Print_Bubble(A, n);
for (j = n - 1; j > i; --j)
{
if (A[j] < A[j - 1])
{
flag = 1;
swap(A[j - 1], A[j]);
k++;
}
}
}
return k;
}
int main(int argc, char* argv[])
{
int N, i, j;
int A[100];
cin >> N;
for (i = 0; i < N; ++i)
cin >> A[i];
j=BubbleSort(A, N);
cout << "the reverse number of the Array is:" << j << endl;
system("PAUSE");
return 0;
}