亲爱的总有些事没办法教..........................................................................................................
前言
介绍冒泡排序的思想,和实现方式。
提示:以下是本篇文章正文内容,下面案例可供参考
一、【冒泡排序的介绍】
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。
它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行,直到没有相邻元素需要交换,也就是说该元素列已经排序完成。核心思想就是:两两相邻的元素进行比较。
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”
举个通俗的例子:给定6,4,1,2,9,3,7,8,10,5这10个数字要求将这10个数字按从小到大的形式进行排序,运用冒泡排序的思想就是:先用6和4比,因为6>4则交换6,4
变为4,6,1,2,9,3,7,8,10,5然后再用6和1进行比较...........直到交换为
4,1,2,6,9,3,7,8,10,5此时由于6<9则用9继续往下交换,直到交换为
4,1,2,6,3,7,8,9,10,5时,因9<10所以10与5进行比较,10>5则交换10,5最终变为4,1,2,6,3,7,8,9,5,10这样我们就完成了1趟冒泡排序,一直重复该操作,最终可以达到效果,这里用图片表示:
二、【实现思路】
2.1【思路刨析】
显而易见的我们可以发现,当有10个元素时,每进行一趟冒泡排序,10个元素中最大的元素最终会被交换到最右边,而在这第一趟冒泡排序中共有9对元素进行了“比较+交换”操作,如此第二趟则有8对元素...........而这10个元素则总共需要进行9趟冒泡排序才能排序完成。
所以当有n个元素时,共需进行n-1趟冒泡排序,每一趟冒泡排序中又需要对n-1对相邻元素进行“比较+排序”操作。
2.2.【代码编写注意】
1.由于我们需要确定冒泡排序的趟数和每趟的操作数,所以需要盛放元素数组的大小,需要注意的是,我们在计算大小sz时应提前计算,之后将sz作为参数传入bubblr_sort函数,而不是,在函数内部计算。
2.确定好冒泡排序的趟数和每趟的操作数,即趟数为n-1,操作数为n-1-趟。
3.时间复杂度
若文件的初始状态是正序的,一趟扫描即可完成排序。
所需的关键字比较轮数C和记录移动轮数M均达到最小值:C=n-1和M=0。
所以,冒泡排序最好的时间复杂度为O(n)
若初始文件是反序的,需要进行n-1趟排序。每趟排序要进行n-i轮关键字的比较(1≤i≤n-1),且每轮比较都必须移动记录三轮来达到交换记录位置。
在这种情况下,比较和移动轮数均达到最大值:C=[n(n-1) ]/2=O(n^2) , M=[3n(n-1)]/2=O(n^2)
所以,冒泡排序的最坏时间复杂度为O(n^2)
综上,冒泡排序总的平均时间复杂度为O(n^2)
三、【代码部分】
代码:
void bubble_sort(int arr[], int n)
{
int flag=0;
for (int i = 0; i < n - 1; i++)
{
flag=0;
for (int j = 0; j < n - i - 1; j++)
{
if (arr[j] > arr[j + 1])
{
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
int flag=1;
}
}
if(flag==0)//定义一个标识量,如果在这里flag的值没有改变说明,这一趟冒泡排序不需要进行
{//交换操作,同时也说明,冒泡排序已经完成了。
break;
}
}
}
int main()
{
int n = 0;
int arr[100] = { 0 };
printf("输入要排序的个数:\n");
scanf("%d", &n);
printf("输入要排序的数,以换行来分隔\n");
for (int i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
}
bubble_sort(arr, n);
for (int j = 0; j < n; j++)
{
printf("%d ", arr[j]);
}
return 0;
}
运行结果:
总结
关于冒泡排序的分享就到这里了。
........................................................................................我戒不掉她的微笑,洋溢幸福的味道
————《她的睫毛》