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]。
现在介绍两种著名的排序方式:
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]。
相关文章推荐
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- java选择排序,冒泡排序分析,附带二分法查找
- 元素排序几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 冒泡排序、选择排序、插入排序、快速排序算法的时间性能分析(java实现)
- Java--选择排序,冒泡排序
- JAVA 冒泡排序 选择排序
- 实训java第五课 递归 冒泡排序 插入排序 选择排序
- Java程序语言 冒泡排序、选择排序、插入排序
- java基本算法总结(冒泡排序、选择排序、插入排序)
- Java语言中选择排序和冒泡排序
- java实现选择排序和冒泡排序
- 冒泡排序和选择排序的JAVA程序
- java 选择排序和冒泡排序
- java中的三种排序方法使用:选择排序,冒泡排序,sort方法排序。
- Java--选择排序,冒泡排序
- Java 数据结构----冒泡排序 选择排序
- java 实现 冒泡排序、选择排序、插入排序。
- [java]排序分类--及选择排序、插入排序、冒泡排序、快速排序的解释图和代码
- 黑马程序员java学习— 数组的选择排序和冒泡排序