欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++冒泡排序及其優(yōu)化算法

 更新時間:2021年11月27日 17:55:11   作者:笑霸final  
這篇文章主要為大家介紹了C++冒泡排序及其優(yōu)化算法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

冒泡排序極其優(yōu)化

算法步驟

1.比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。

2.對每一對相鄰元素作同樣的工作,從開始第一對到結(jié)尾的最后一對。這步做完后,最后的元素會是最大的數(shù)。

3.針對所有的元素重復(fù)以上的步驟,除了最后一個。

4.持續(xù)每次對越來越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對數(shù)字需要比較

全部程序

//為了隨機生成區(qū)間 [m,n] 之間的整數(shù),可以用公式 rand()%(n-m+1)+m。
#include<iostream>
using namespace std;
#define N 20
int main(){
	int arry[N]={0};
	for(int i=0;i<N;i++)
		arry[i]=rand()%(100-1+1)+1;
	for (int i = 1; i <= N; i++) {
		printf("%d \t", arry[i-1]);
		if (i % 5 == 0)
			printf("\n");
	}
	/*****************冒泡排序*********************/
	int s = 0;//	當?shù)谝淮瓮耆行驎r直接跳過s可以是小于0的數(shù)字
	for(int e=N-1;e>0;e--){		
		for(int b=0;b<e;b++){
			if(arry[b]<arry[b+1]){
				int tep=arry[b];
				arry[b]=arry[b+1];
				arry[b+1]=tep;
				s=b+1;//記錄最后一次交換的位置(取循環(huán)下標最大值)
			}
		}
		e=s;
	}
	printf("\n排序后:\n");	
	for (int i = 1; i <= N; i++) {
		printf("%d \t", arry[i-1]);
		if (i % 5 == 0)
			printf("\n");
	}
	getchar();
	return 0;
}

冒泡排序代碼

for(int e=N-1;e>0;e--){				//外循環(huán):N個數(shù)據(jù)比較N-1次
		for(int b=0;b<e;b++){		//內(nèi)循環(huán):每大循環(huán)1次就少一次比較
			if(arry[b]<arry[b+1]){
				int tep=arry[b];
				arry[b]=arry[b+1];
				arry[b+1]=tep;
			}
		}
	}

優(yōu)化思路

有可能一堆數(shù)據(jù)后面已經(jīng)排好序,或者循環(huán)幾次后,后面的數(shù)據(jù)就是有序的。這個時候如果我們標記最后一次數(shù)據(jù)交換的位置。外循環(huán)就會減少循環(huán)的次數(shù)。注意觀察下面排序的過程(綠色是在比較(交換)黃色是比較完成)

冒泡排序優(yōu)化核心代碼

/*****************冒泡排序優(yōu)化*********************/
	int s = 0;//	定義變量用來標記角標
	for(int e=N-1;e>0;e--){		
		for(int b=0;b<e;b++){
			if(arry[b]<arry[b+1]){
				int tep=arry[b];
				arry[b]=arry[b+1];
				arry[b+1]=tep;
				s=b+1;//記錄最后一次交換的位置(取循環(huán)下標最大值)
					  //arry[b],arry[b+1]這兩個數(shù)據(jù)交換取角標較大的b+1
			}
		}
		e=s;
	}

以上就是C++冒泡排序及其優(yōu)化算法的詳細內(nèi)容,更多關(guān)于C++冒泡排序及其優(yōu)化的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 深入分析C++派生類中的保護成員繼承

    深入分析C++派生類中的保護成員繼承

    這篇文章主要介紹了C++派生類中的保護成員繼承,深入對C++面向?qū)ο缶幊痰睦^承機制進行了解析,需要的朋友可以參考下
    2015-09-09
  • C++設(shè)計模式之橋接模式

    C++設(shè)計模式之橋接模式

    這篇文章主要介紹了C++設(shè)計模式之橋接模式,本文講解了什么是橋接模式、為什么要使用橋接模式、什么時候使用橋接模式等內(nèi)容,需要的朋友可以參考下
    2014-09-09
  • 使用mmap實現(xiàn)大文件的復(fù)制(單進程和多進程)

    使用mmap實現(xiàn)大文件的復(fù)制(單進程和多進程)

    這篇文章主要為大家詳細介紹了使用mmap實現(xiàn)大文件的復(fù)制,單進程與多進程的兩種情況,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • C++編程中指針的聲明與基本使用講解

    C++編程中指針的聲明與基本使用講解

    這篇文章主要介紹了詳解C++編程中C++編程中指針的聲明與基本使用講解,文中舉了簡單的例子來講如何在基本的數(shù)據(jù)結(jié)構(gòu)中使用指針,以及固定和可變指針的介紹,需要的朋友可以參考下
    2016-01-01
  • c++類構(gòu)造函數(shù)詳解

    c++類構(gòu)造函數(shù)詳解

    這篇文章主要介紹了c++類構(gòu)造函數(shù)示例,需要的朋友可以參考下
    2014-05-05
  • C語言實現(xiàn)簡單學(xué)生成績管理系統(tǒng)

    C語言實現(xiàn)簡單學(xué)生成績管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡單學(xué)生成績管理系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • c++插入排序詳解

    c++插入排序詳解

    插入排序的基本思想是每次將一個待排序的記錄,按其關(guān)鍵字大小插入到前面已經(jīng)排好序的子文件中的適當位置,直到全部記錄插入完成為止。下面我們來詳細探討下C++實現(xiàn)插入排序
    2017-05-05
  • QT實現(xiàn)提示右下角冒泡效果

    QT實現(xiàn)提示右下角冒泡效果

    這篇文章主要為大家詳細介紹了QT實現(xiàn)提示右下角冒泡效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • 最新評論