您的位置:首页 > 编程语言 > Java开发

java-冒泡排序和选择排序的分析

2016-09-13 11:49 204 查看
两种排序方式

现在介绍两种著名的排序方式:

1,       冒泡排序:相邻元素进行比较,较大的往右边移动:结果就是每一次排序,最大的都会移动到右边。最后结果就是升序的序列。

如:3,4,2,6,7

第一轮:1,3<4  不变  3,4,2,6,7

               2,4>2  交换位置 3,2,4,6,7

               3,4<6  不变    3,2,4,6,7

               4,6<7  不变 3,2,4,6,7

第二轮:1,3>2  交换位置  2,3,4,6,7

        2,3<4   不变

               3.  4<6   不变

.。。。

转换成一般性规律,每一轮比较最大值就会移动到最右边来,一共会比较个数-1次。

用代码实现的话:

            for(int
i=0;i<a.length-1;i++){
      for(int
j=0;j<a.length-1-i;j++){
         if(a[j]>a[j+1]){
            int
temp;
           
temp =a[j];
           
a[j]=a[j+1];
           
a[j+1]=temp;}}}
   外层的i循环表示的循环次数,内循环表示每一轮循环的状况,变化在于j<a.length-1-i,因为每一轮循环后,都会排出一个最大值,那个不用再进行比较,所以减去循环的次数。
2,选择排序:有一个数组a[i]的话,选择排序就是a[0]和后面的元素依次比较,接着a[1]和后面的元素一次比较
例:a[]={7,3,2,8,6,4}
第一轮:1,7>3,交换,3,7,2,8,6,4
       2, 3>2,交换,2,7,3,8,6,4
       3,3<8,3<6,3<4后面三步都是小于,所以不变。
   第一轮结果:2,7,3,8,6,4
第二轮:1,7>3,交换,2,3,7,8,6,4
       2,3<7,3<8,3<6,3<4.后面四部都是小于,所以不变
    第二轮结果:2,3,7,8,6,4
第三轮:1,7<8 不变
       2,7>6,交换,2,3,6,8,7,4
       3,6>4,交换,2,3,4,8,7,6
第四轮1,8>7,交换,2,3,4,7,8,6
     2,7>6,交换,2,3,4,6,8,7
第五轮1,8>7,交换,2,3,4,6,7,8
上述过程,说明选择排序,每一轮都是把最小值选出放在左边,经过元素个数-1论比较。
源码:
for(int
i=0;i<a.length-1;i++){
      for(int
j=i+1;j<a.length;j++){
         if(a[i]>a[j]){
            int
temp;
           
temp =a[i];
           
a[i]=a[j];
           
a[j]=temp;}}}
外层循环i,是表示循环的次数,内存是比较的逻辑,需要注意的是:初始值j=i+1,是因为,在一轮比较中a[i]是固定不变的,只需要下标i比较后面的值,而限定条件j<a.length的原因,每一回都取到的最右边的值,也就是a[a.length-1]。
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息