赞
踩
作者主页:
文章主要内容:
了解冒泡排序
目录
冒泡排序:
冒泡排序(Bubble Sort),又被称为气泡排序或泡沫排序。它会遍历若干次需要排序的数列,每次遍历时,它都会从前往后依次的比较相邻两个数的大小;如果前者比后者大,则交换它们的位置。这样,一次遍历之后,最大的元素就在数列的末尾! 采用相同的方法再次遍历时,第二大的元素就被排列在最大元素之前。重复此操作,直到整个数列都有序为止!
对一一个a[6]={20,40,10,5,50,30}进行冒泡排序
对于六个元素进行五次循环的左右比较,将两者较大数依次往后传递,这就是冒泡排序的图形理解
根据这种方法:
第2趟排序完之后,数列中a[5...6]是有序的。
第3趟排序完之后,数列中a[4...6]是有序的。
第4趟排序完之后,数列中a[3...6]是有序的。
第5趟排序完之后,数列中a[1...6]是有序的。第5趟排序之后,整个数列也就是有序的了。
代码演示:
#include<stdio.h> int main() { int a[6]={20,40,10,5,50,30}; int i = 0; for(j=0;j<5;j++)//外部总共要遍历n-1次(n为元素个数) { for(i=0;i<5-j;i++)//每一次将最大值放在最后以后,前面的数两者比较次数-1,只需要和最大值前面的元素比较 { if(a[i]>a[i+1])//比较相邻两者大小关系,如果前面元素大则需要改变位置 { trmp = a[i];//通过中间量交换两者位置 a[i]=a[i+1]; a[i+1]=temp; } } } return 0; }
优化:
再冒泡排序过程中,我们能发现,在第二趟结束以后,整个数列已经有序了,但程序依旧会进入循环比较。这个时候我们能通过中间量返回值来判断是否已经有序。
若两者交换了位置则是无序,如何一整趟下来都没有交换位置,则已经有序,可以停止接下来的判断了。
优化代码:
#include<stdio.h> int main() { int a[6]={20,40,10,5,50,30}; int i = 0; for(j=0;j<5;j++)//外部总共要遍历n-1次(n为元素个数) { int k = 0;//有序判断控制器 for(i=0;i<5-j;i++)//每一次将最大值放在最后以后,前面的数两者比较次数-1,只需要和最大值前面的元素比较 { if(a[i]>a[i+1])//比较相邻两者大小关系,如果前面元素大则需要改变位置 { trmp = a[i];//通过中间量交换两者位置 a[i]=a[i+1]; a[i+1]=temp; k=1; } } if(k==0)//当等于0则没有交换 { break; } } return 0; }
以上就是今天要讲的内容,本文仅仅简单介绍了冒泡排序使用,而冒泡排序思维提供了大量能使我们快速便捷地解决问题的方案。希望大家多多支持。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。