数组中的冒泡排序

9 8 7 6 5 4 3 2 1 0

8 7 6 5 4 3 2 1 0 9 ====>第1趟 i=0 交换9次 arr.length-1-i

7 6 5 4 3 2 1 0 8 9 ====>第2趟 i=1 交换8次 arr.length-1-i

6 5 4 3 2 1 0 7 8 9 ====>第3趟 i=2 交换7次 arr.length-1-i

5 4 3 2 1 0 6 7 8 9 ====>第4趟 i=3 交换6次 arr.length-1-i

4 3 2 1 0 5 6 7 8 9 ====>第5趟 i=4 交换5次 arr.length-1-i

3 2 1 0 4 5 6 7 8 9 ====>第6趟 i=5 交换4次 arr.length-1-i

2 1 0 3 4 5 6 7 8 9 ====>第7趟 i=6 交换3次 arr.length-1-i

1 0 2 3 4 5 6 7 8 9 ====>第8趟 i=7 交换2次 arr.length-1-i

0 1 2 3 4 5 6 7 8 9====>第9趟 i=8 交换1次 arr.length-1-i

过程:

i 是外层循环的趟数  第1次(i=0)  一共循环了9趟,所以i是length-1

j 是里层循环比较的次数,把第一个数和后面数依次比较,10个数的两两比较只要比较9次 ,所以j也是lenght-1

观察可以发现,每趟的9次比较中,交换的次数是依次减少的(两两交换的次数:交换9次,8次,7次..),为了提高效率,可以把里层循环简化为 arr.length-1-i

时间: 2024-08-01 10:45:16

数组中的冒泡排序的相关文章

动态数组,数组初始化,数组内存释放,向数组中添加一个元素,向数组中添加多个元素,数组打印,顺序查找,二分查找,查找数组并返回地址,冒泡排序,改变数组中某个元素的值,删除一个数值,删除所有,查找含有

 1定义接口: Num.h #ifndef_NUM_H_ #define_NUM_H_ #include<stdio.h> #include<stdlib.h> /************************************************************************/ /*数组的结构体类型                                                    */ /*******************

数组中元素的排序(常用的冒泡排序、选择排序、快速排序)

1.冒泡排序(以从小到大为例) [分析]:冒泡排序的思想就是,两两进行比较,第一个元素和第二个元素进行比较,如果第一个元素比第二个元素大,则这两个元素交换位置,然后第二个元素和第三个元素进行比较,如果第二个元素比第三个元素大,交换位置,依次类推,知道到最后一个元素.在比较的时候,每进行一轮比较,就可以找到当前这一轮的最大值, 我们可以将每一轮找到的最大值放到最后,知道最终剩下两个值,比较完之后,就可以将当前数列的数据按照从小到大的顺序排列好. 以:a=[  2 ,  6  ,8  ,9  ,1 

js中的冒泡排序以及实现一个数组中得最到最大的数字小例

这其实是一个很简单的js就可以实现,当然一般情况就是利用for循环,从第一个跟第二个开始比较,根据大小交互位置,思路很简单. 也就是js中的冒泡排序 冒泡排序 时间复杂度为O(n^2),有两个优点: 1.“编程复杂度”很低,很容易写出代码: 2.具有稳定性,这里的稳定性是指原序列中相同元素的相对顺序仍然保持到排序后的序列,而堆排序.快速排序均不具有稳定性. 实现基本思路:冒泡排序是经过n-1趟子排序完成的,第i趟子排序从第1个数至第n-i个数,若第i个数比后一个数大(则升序,小则降序)则交换两数

去掉数组中重复的数字

冒泡排序语法: for (int i = 0; i < 数组长度 - 1; i++) { for (int j = 0; j < 数组长度 - i - 1; j++) { if (数组名[j] < 数组名[j + 1]) { int empty = 数组名[j]; 数组名[j] = 数组名[j + 1]; 数组名[j + 1] = empty; } } } 上面这个语法是降序排序,如果想升序的话就把if(数组名[j]<数组名[j=1])里面的小于号“<”改成大于号“>”

javascript中的冒泡排序

冒泡排序:就是将一个数组中的元素按照从大到小或者从小到大的顺序进行排列. var array=[9,8,7,6,5,4,3,2,1]; 第一轮比较:8,7,6,5,4,3,2,1,9      交换了8次        i=0   j=array.length-1-i 第二轮比较:7,6,5,4,3,2,1,8,9      交换了7次        i=1   j=array.length-1-i 第三轮比较:6,5,4,3,2,1,7,8,9      交换了6次        i=2  

java中如何在Arraylist中实现冒泡排序的问题

众所周知,冒泡排序法在一般数组中就3步, 1 if(a<b){ 2 temp=a; 3 a=b; 4 b=temp; 5 } 然而,在集合中就不是简单的交换一下了,因为交换之后,必须保证新的值被重新设置到集合中去.那么变难了吗?实际上更简单了: 1 if(a<b){ 2 workerlist.get(j).setSc(b); 3 workerlist.get(j+1).setSc(a); 4 } 原理还是交换,不过不需要媒介temple 了. 具体代码见下: *****************

Java中的冒泡排序(减少比较次数)

package yzhou.sort; import java.util.Arrays; public class BubbleSort { public static void main(String[] args) { int[] arr = { 9, 1, 2, 5, 4 }; sort(arr); System.out.println(Arrays.toString(arr)); } // 减少每一趟的次数 public static void sort(int[] arr) { boo

C实现数组中元素的排序

使用C实现数组中元素的排序,使得数组中的元素从小到大排列.只不过在这个过程中出了一点小问题,在C中进行数字交换的时候,必须要使用指针的,不能使用引用.在后面的文章中,我要学习一个在C中的引用和指针的区别.下面看一下我的代码吧. #include <stdio.h> void swap(int *a,int *b); void rest(int lels[],int count); /** * 该实例用于实现对用户输入的数组进行排序 * 要求的数组中的元素从小到大来咧 * * @brief ma

php中的冒泡排序算法

<?php //php中的冒泡排序算法 //从大到小的排序方式 ,$arr[$j]>$arr[$j+1](这里换成了从小到大的排序方式) $arr=array(); $arr=array(0,41,12,33,4,15,26,7,8,89); $length=count($arr); //得到数组的总长度 for($i=0;$i<$length;$i++){ for($j=0;$j<$length-$i;$j++){ if($arr[$j]<$arr[$j+1]){ $tmp