冒泡排序法

Posted weiker12

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了冒泡排序法相关的知识,希望对你有一定的参考价值。

        冒泡排序是非常容易理解和实现,以从小到大排序举例:

设数组长度为N

1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。

2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。

3.N=N-1,如果N不为0就重复前面二步,否则排序完成。

代码如下:

#include<iostream>
using namespace std;


void BubbleSort(int a[], int n)

       int i, j;
       for (i = 0; i < n; i++)
          for (j = 1; j < n - i; j++)
              if (a[j - 1] > a[j])
                   swap(a[j - 1], a[j]);

void output_array(int a[], int n)  
  
    int i;  
    for (i=0;i<n;i++)  
      
        cout<<a[i]<<" ";  
      
    cout<<endl;  

void main()

	int b[]=3,1,5,6,4,2,9,7,8,0;
	cout <<"冒泡排序前:";
	for(int k = 0;k < 10;k++)
	cout << b[k] << " ";
	cout << endl <<"冒泡排序后:" ;;
	BubbleSort(b,10);
	output_array(b,10);  
	getchar();

冒泡排序法优化,设置发生交换的标志,代码如下:

#include<iostream>
using namespace std;

void BubbleSort(int a[], int n)

       int i, j;
	   bool flag;
	   i = n;
	   flag = true;
	   while(flag)
	   
	   flag = false;
              for (j = 1; j < i; j++)
                     if (a[j - 1] > a[j])
		 
                            swap(a[j - 1], a[j]);
			   flag = true;
		 
	  i--;
	   

void output_array(int a[], int n)  
  
    int i;  
    for (i=0;i<n;i++)  
      
        cout<<a[i]<<" ";  
      
    cout<<endl;  

void main()

	int b[]=3,1,5,6,4,2,9,7,8,0;
	cout <<"冒泡排序前:";
	for(int k = 0;k < 10;k++)
	cout << b[k] << " ";
	cout << endl <<"冒泡排序后:" ;;
	BubbleSort(b,10);
	output_array(b,10);  
	getchar();

再做进一步的优化。如果有100个数的数组,仅前面10个无序,后面90个都已排好序且都大于前面10个数字,那么在第一趟遍历后,最后发生交换的位置必定小于10,且这个位置之后的数据必定已经有序了,记录下这位置,第二次只要从数组头部遍历到这个位置就可以了。代码如下:

#include<iostream>
using namespace std;


void BubbleSort(int a[], int n)

       int i, j;
	   int flag;
	   flag = n;
	   while(flag > 0)
	   
	          j = flag;
			  flag = 0;
              for (i = 1; i < j; i++)
                     if (a[i - 1] > a[i])
					 
                            swap(a[i - 1], a[i]);
							flag = j;
					 
	   

void output_array(int a[], int n)  
  
    int i;  
    for (i=0;i<n;i++)  
      
        cout<<a[i]<<" ";  
      
    cout<<endl;  

void main()

	int b[]=3,1,5,6,4,2,9,7,8,0;
	cout <<"冒泡排序前:";
	for(int k = 0;k < 10;k++)
	cout << b[k] << " ";
	cout << endl <<"冒泡排序后:" ;;
	BubbleSort(b,10);
	output_array(b,10);  
	getchar();




以上是关于冒泡排序法的主要内容,如果未能解决你的问题,请参考以下文章

c++冒泡排序法

JavaScript的冒泡法排序选择法排序

算法大神之路----排序(冒泡排序法)

JAVA 冒泡排序法的详细解释是啥?

php排序介绍_冒泡排序_选择排序法_插入排序法_快速排序法

数组的排序,冒泡法,快速排序法