以升序为例,外层循环为趟数,共n-1趟(n为数组长度)。每一趟从第一个元素开始,与下一个元素比较。对于某个元素若大于下一元素,则交换。这样第一趟必然得到最大元素,即最大元素归位;第二趟必然得到第二大元素,即第二大元素归位…所以每趟只需比较n-(i+1)次,因为最大的i+1个已经归位。每次都将没排好的最大排好,故称冒泡排序。
#include//冒泡排序法 void main() { int arr[] = {89,61,55,36,35,10,1}; int temp = 0; int n = 6; for (int i = 0; i < n-1; i++) //外层循环为趟数 { for (int j = 0; j < n - i - 1; j++) { if (arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j+1]; arr[j + 1] = temp; } } printf("第%d趟结果:",i); for (int k=0;k<7;k++) { printf("%d ",arr[k]); } printf("n"); } }
时间复杂度分析:第 i 趟需要比较 n-(i+1) 次,共n-1趟(i从0到n-1)。总共需要比较(n-1)n/2次。故时间复杂度为O(n^2)。
算是重拾冒泡排序法吧,今年已经大三了。大一就学了冒泡排序,那时应是一知半解,或者说曾经懂过。当时理解了后,为了快,就像背公式一样背下来了。时隔两年,再想着使用时,发现已经不会,而网上的冒泡排序C语言也有很多种,一时不知哪个是正确的。乃重拾原理,记于此,不相忘。
参考博客:https://blog.csdn.net/qq_39741605/article/details/80821595
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)