温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C言语冒泡排序算法及代码

发布时间:2020-07-20 12:32:05 来源:网络 阅读:250 作者:yuw2016 栏目:网络安全

根本思惟及举例阐明

冒泡排序的根本思惟就是不时比拟相邻的两个数,让较大的元素不时地往后移。经由一轮比拟,就选出最大的数;经由第2轮比拟,就选出次大的数,以此类推。
下面以对 3  2  4  1 停止冒泡排序阐明。
第一轮 排序进程
3  2  4  1    (最后)
2  3  4  2    (比拟3和2,交流)
2  3  4  1    (比拟3和4,不交流)
2  3  1  4    (比拟4和1,交流)
第一轮完毕,最大的数4曾经在最初面,因而第二轮排序只需求对后面三个数停止再比拟。
第二轮 排序进程
2  3  1  4 (第一轮排序后果)
2  3  1  4 (比拟2和3,不交流)
2  1  3  4 (比拟3和1,交流
第二轮完毕,第二大的数曾经排在倒数第二个地位,所以第三轮只需求比拟前两个元素。
第三轮 排序进程
2  1  3  4  (第二轮排序后果)
1  2  3  4  (比拟2和1,交流)
至此,排序完毕。

算法总结及完成

关于具有N个元素的数组R[n],停止最多N-1轮比拟;
第一轮,逐一比拟(R[1], R[2]),  (R[2], R[3]),  (R[3], R[4]),  …….  (R[N-1], R[N]) ;  最大的元素会被挪动到R[N]上。
第二轮,逐一比拟(R[1], R[2]),  (R[2], R[3]),  (R[3], R[4]),  …….  (R[N-2], R[N-1]);第二大元素会被挪动到R[N-1]上。
。。。。
以此类推,直到全部数组从小到大排序。
下面给出了冒泡排序的普通完成和优化完成。普通完成是教科书里罕见的完成办法,无论数组能否排序好了,都邑停止N-1轮比拟; 而优化完成,在数组曾经排序好的状况下,会提早加入比拟,减小了算法的工夫复杂度。

纯文本复制
			#include<stdio.h> #include<stdlib.h> #define N 8 void bubble_sort(int a[],int n); //普通完成 void bubble_sort(int a[],int n)//n为数组a的元素个数 { //必定停止N-1轮比拟 for(int i=0; i<n-1; i++) { //每一轮比拟前n-1-i个,即已排序好的最初i个不必比拟 for(int j=0; j<n-1-i; j++) { if(a[j] > a[j+1]) { int temp = a[j]; a[j] = a[j+1]; a[j+1]=temp; } } } } //优化完成 void bubble_sort_better(int a[],int n)//n为数组a的元素个数 { //最多停止N-1轮比拟 for(int i=0; i<n-1; i++) { bool isSorted = true; //每一轮比拟前n-1-i个,即已排序好的最初i个不必比拟 for(int j=0; j<n-1-i; j++) { if(a[j] > a[j+1]) { isSorted = false; int temp = a[j]; a[j] = a[j+1]; a[j+1]=temp; } } if(isSorted) break; //假如没有发作交流,阐明数组曾经排序好了 } } int main() { int num[N] = {89, 38, 11, 78, 96, 44, 19, 25}; bubble_sort(num, N); //或许运用bubble_sort_better(num, N); for(int i=0; i<N; i++) printf("%d  ", num[i]); printf("\n"); system("pause"); return 0; }


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI