网站推广中的评估指标有哪些,网站做哪些比较有意思,优秀ppt模板免费下载,wordpress 图像主题一、冒泡排序#xff08;Bubble Sort#xff09;思想 #xff08;1#xff09;冒泡排序#xff08;Bubble Sort#xff09;#xff0c;是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的数列#xff0c;一次比较两个元素#xff0c;如果他们的顺序错误…一、冒泡排序Bubble Sort思想
1冒泡排序Bubble Sort是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的数列一次比较两个元素如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换也就是说该数列已经排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端故名。2冒泡排序算法的运作如下从后往前比较相邻的元素。如果第一个比第二个大就交换他们两个。 对每一对相邻元素作同样的工作从开始第一对到结尾的最后一对。在这一点最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤除了最后一个。 持续每次对越来越少的元素重复上面的步骤直到没有任何一对数字需要比较。 二、算法实现
简单算法 public static void bubbleSort(int[] data) {int temp;//临时空间//data.length - 1趟for (int i 0; i data.length - 1; i) {//data.length - 1 - i内两两比较交换for (int j 0; j data.length - i - 1; j) {if(data[j]data[j1]){tempdata[j];data[j]data[j1];data[j1]temp;}}}} 优化算法一 public static void bubbleSort(int[] data) {boolean flag; //用来没有记录交换int temp;//临时空间//data.length - 1趟for (int i 0; i data.length - 1; i) {flagtrue;//初始化没有交换标志//data.length - 1 - i内两两比较交换for (int j 0; j data.length - i - 1; j) {if(data[j]data[j1]){tempdata[j];data[j]data[j1];data[j1]temp;flagfalse;}}//一趟没有交换则退出if(flag){break;}}} 优化算法二 public static void bubbleSort(int[] data) {int limitdata.length-1; //用来保存最后交换记录int limitTemp;int temp;//临时空间//data.length - 1趟while(limit0) {limitTemplimit;//初始化次数limit0;//len内两两比较交换for (int j 0; j limitTemp ; j) {if(data[j]data[j1]){limitj;tempdata[j];data[j]data[j1];data[j1]temp;}} }} 三、算法复杂度
若文件的初始状态是正序的一趟扫描即可完成排序。所需的关键字比较次数 和记录移动次数 均达到最小值 。所以冒泡排序最好的时间复杂度为 。
若初始文件是反序的需要进行n-1 趟排序。每趟排序要进行n-i次关键字的比较(1≤i≤n-1)且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下比较和移动次数均达到最大值冒泡排序的最坏时间复杂度为 。 综上因此冒泡排序总的平均时间复杂度为 。 最优的时间复杂度为O( n2 ) 有的说 O(n)这是经过优化的算法 最差的时间复杂度为O( n2 ) 平均的时间复杂度为O( n2 ) 空间复杂度就是在交换元素时那个临时变量所占的内存空间最优的空间复杂度就是开始元素顺序已经排好了则空间复杂度为0最差的空间复杂度就是开始元素逆序排序了则空间复杂度为O(n)平均的空间复杂度为O(1) 算法稳定性 冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较交换也发生在这两个元素之间。所以如果两个元素相等我想你是不会再无聊地把他们俩交换一下的如果两个相等的元素没有相邻那么即使通过前面的两两交换把两个相邻起来这时候也不会交换所以相同元素的前后顺序并没有改变所以冒泡排序是一种稳定排序算法。