冒泡排序

来源:互联网 发布:md5加密c语言代码 编辑:程序博客网 时间:2024/06/05 15:28

[cpp] view plain copy
print?
  1. <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中每一个相邻元素进行比较。

[cpp] view plain copy
print?
  1. void Bubble_sort(SortArray *A , int n)  
  2. {  
  3.     int i , j , temp;  
  4.     for (i = 0 ; i < n-1 ; i++)  
  5.     {  
  6.         for (j = i+1; j < n ; j ++)  
  7.         {  
  8.             if ((*A)[i] > (*A)[j])  
  9.             {  
  10.                 temp = (*A)[i];  
  11.                 (*A)[i] = (*A)[j];  
  12.                 (*A)[j] = temp;  
  13.             }  
  14.         }  
  15.     }  
  16. }  
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)冒泡排序顾名思义,像冒泡一样有大到小,上述算法只是简单地将相邻两个数进行了比较和替换位置,从该算法中不难看出,存在很多多余的比较和替换位置。

[cpp] view plain copy
print?
  1. void Bubble_sort(SortArray *A , int n)  
  2. {  
  3.     int i , j , temp;  
  4.     for (i = n -1 ; i >=0 ; i–)  
  5.     {  
  6.         for (j = 0; j < i ; j ++)  
  7.         {  
  8.             if ((*A)[j] > (*A)[j+1])  
  9.             {  
  10.                 temp = (*A)[j+1];  
  11.                 (*A)[j+1] = (*A)[j];  
  12.                 (*A)[j] = temp;  
  13.             }  
  14.         }  
  15.     }  
  16. }  
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对上述算法进行优化。

[cpp] view plain copy
print?
  1. void Bubble_sort(SortArray *A , int n)  
  2. {  
  3.     int i , j , temp;  
  4.     bool flag = true;   
  5.     for (i = n -1 ; i >=0 ; i–)  
  6.     {  
  7.         flag = false;  
  8.         for (j = 0; j < i ; j ++)  
  9.         {  
  10.             if ((*A)[j] > (*A)[j+1])  
  11.             {  
  12.                 temp = (*A)[j+1];  
  13.                 (*A)[j+1] = (*A)[j];  
  14.                 (*A)[j] = temp;  
  15.                 flag = true;  
  16.             }  
  17.         }  
  18.         if (flag == falsebreak;  
  19.     }  
  20. }  
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).



最后附上主程序:

[cpp] view plain copy
print?
  1. #include <stdio.h>  
  2. #include “stdafx.h”  
  3. #include <iostream>   
  4. using namespace std;  
  5.   
  6. #define MAX 100  
  7. typedef int SortArray[MAX];  
  8.   
  9. int _tmain(int argc, _TCHAR* argv[])  
  10. {  
  11.     int n ;  
  12.     SortArray A;  
  13.     cout<<”/**冒泡排序**/\n”  
  14.         <<”请输入数组个数”<<endl;  
  15.     cin>>n;  
  16.     cout<<”请输入待排序数组”<<endl;  
  17.     for (int i = 0 ; i < n ; i++)  
  18.     {  
  19.         cin>>A[i];  
  20.     }  
  21.     cout<<”正在排序请稍后…..”<<endl;  
  22.     Bubble_sort(&A,n);  
  23.     cout<<”排序结果如下…..”<<endl;  
  24.     for (int i = 0 ; i < n ; i++)  
  25.     {  
  26.         cout<<A[i]<<endl;  
  27.     }  
  28.     system(”pause”);  
  29.     return 0;  
  30. }  
#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;
}



原创粉丝点击