目录
  • 冒泡排序极其优化
    • 算法步骤
    • 全部程序
  • 冒泡排序代码
    • 优化思路
      • 冒泡排序优化核心代码

        冒泡排序极其优化

        算法步骤

        1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。

        2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。

        3.针对所有的元素重复以上的步骤,除了最后一个。

        4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较

        C++冒泡排序及其优化算法

        全部程序

        //为了随机生成区间 [m,n] 之间的整数,可以用公式 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;//	当第一次完全有序时直接跳过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;//记录最后一次交换的位置(取循环下标最大值)
        			}
        		}
        		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;
        }
        

        C++冒泡排序及其优化算法

        冒泡排序代码

        for(int e=N-1;e>0;e--){				//外循环:N个数据比较N-1次
        		for(int b=0;b<e;b++){		//内循环:每大循环1次就少一次比较
        			if(arry[b]<arry[b+1]){
        				int tep=arry[b];
        				arry[b]=arry[b+1];
        				arry[b+1]=tep;
        			}
        		}
        	}
        

        优化思路

        有可能一堆数据后面已经排好序,或者循环几次后,后面的数据就是有序的。这个时候如果我们标记最后一次数据交换的位置。外循环就会减少循环的次数。注意观察下面排序的过程(绿色是在比较(交换)黄色是比较完成)

        C++冒泡排序及其优化算法

        冒泡排序优化核心代码

        /*****************冒泡排序优化*********************/
        	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;//记录最后一次交换的位置(取循环下标最大值)
        					  //arry[b],arry[b+1]这两个数据交换取角标较大的b+1
        			}
        		}
        		e=s;
        	}
        

        以上就是C++冒泡排序及其优化算法的详细内容,更多关于C++冒泡排序及其优化的资料请关注其它相关文章!

        声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。