亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

算法步驟

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

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

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

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

全部程序

//為了隨機(jī)生成區(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;//	當(dāng)?shù)谝淮瓮耆行驎r(shí)直接跳過(guò)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)下標(biāo)最大值)
			}
		}
		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個(gè)數(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ù)就是有序的。這個(gè)時(shí)候如果我們標(biāo)記最后一次數(shù)據(jù)交換的位置。外循環(huán)就會(huì)減少循環(huán)的次數(shù)。注意觀察下面排序的過(guò)程(綠色是在比較(交換)黃色是比較完成)

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

/*****************冒泡排序優(yōu)化*********************/
	int s = 0;//	定義變量用來(lái)標(biāo)記角標(biāo)
	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)下標(biāo)最大值)
					  //arry[b],arry[b+1]這兩個(gè)數(shù)據(jù)交換取角標(biāo)較大的b+1
			}
		}
		e=s;
	}

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

    C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單學(xué)生成績(jī)管理系統(tǒng)

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

    c++插入排序詳解

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

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

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