关于数组排序中冒泡排序和选择排序的分析过程与简单代码

数组排序:

冒泡排序

选择排序

插入排序

快速排序

....

1.冒泡排序:

     每一轮比较相邻的两个元素,小的在前,大的在后

int [] arr ={9,7,3,6,1}

i层循环: for(int i=0;i< arr.length-1;i++)

j层循环: for(int j=0;j<arr.length-1-i;j++)

判断条件 arr[j]>arr[j+1]

第一轮:9,7,3,6,1 -> i = 0 arr[j] > arr[j + 1]

1: 7,9,3,6,1 -> j =0 arr[0] 和 arr[1]

2: 7,3,9,6,1 -> j =1 arr[1] 和 arr[2]

3: 7,3,6,9,1 -> j =2 arr[2] 和 arr[3]

4: 7,3,6,1,9 -> j =3 arr[3] 和 arr[4]

第二轮:7,3,6,1,9 i = 1

1: 3,7,6,1,9 -> j =0 2: 3,6,7,1,9 -> j =1 3: 3,6,1,7,9 -> j =2

第三轮:3,6,1,7,9 i = 2

1: 3,6,1,7,9 -> j =0 2: 3,1,6,7,9 -> j =1

第四轮:3,1,6,7,9 i = 3

1: 1,3,6,7,9 -> j =0

2.选择排序:

      每一轮都找出最大或最小值,放在数组最后或最前

int [] arr ={9,7,3,6,1}

i层循环: for(int i=0;i< arr.length-1;i++)

j层循环:for(int j=0;j<arr.length-i;j++)

第一轮:9,7,3,6,1 -> 结果: 1,7,3,6,9     i = 0 j = 1 ~ 4

int index = arr[0]

1: arr[index] 和 arr[1], arr[1] 和 arr[index] 得出最大值,定义一个变量arr[index] = arr[0]

2: arr[2] 和 arr[index] 得出最大值,arr[index] = arr[0]

3: arr[3] 和 arr[index] 得出最大值,arr[index] = arr[0]

4: arr[4] 和 arr[index] 得出最大值,arr[index] = arr[0]

交换位置: arr[index] 和 arr[length - 1 - i]

第二轮:1,7,3,6,9 -> 结果: 1,6,3,7,9        i =1 j = 1 ~ 3

1: arr[0] 和 arr[1] 得出最大值,arr[index] = arr[1]

2: arr[2] 和 arr[index] 得出最大值,arr[index] = arr[1]

3: arr[3] 和 arr[index] 得出最大值,arr[index] = arr[1]

交换位置: arr[index] 和 arr[length - 1 -i]

第三轮:1,6,3,7,9 -> 结果: 1,3,6,7,9       i = 2 j = 1 ~ 2

1: arr[0] 和 arr[1] 得出最大值,arr[index] = arr[1]

2: arr[2] 和 arr[index] 得出最大值,arr[index] = arr[1]

交换位置: arr[index] 和 arr[length - 1 -i]

第四轮:1,3,6,7,9 -> 结果: 1,3,6,7,9         i = 3 j = 1

1: arr[0] 和 arr[1] 得出最大值,arr[index] = arr[1]

交换位置: arr[index] 和 arr[length - 1 -i]

package day04;

import java.util.Arrays;

public class demo03 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int [] arr = {12,45,78,36};
		select(arr);
		System.out.println(Arrays.toString(arr));
		int [] arr1 = {87,54,21,63};
		bubble(arr1);
		System.out.println(Arrays.toString(arr1));
	}

	//选择
	public static void select(int [] arr) {
		for(int i=0;i<arr.length-1;i++) {
			int index=0;
			for(int j=1;j<arr.length-i;j++) {
				if(arr[j]>arr[index]) {
					index=j;
				}
			}//交换位置
			int temp=arr[index];
			arr[index]=arr[arr.length-1-i];
			arr[arr.length-1-i]=temp;
		}
	}
	//冒泡
	public static void bubble(int []arr) {
		for(int i=0;i<arr.length-1;i++) {
			for(int j=0;j<arr.length-1-i;j++) {
				if(arr[j]>arr[j+1]) {
					int temp=arr[j];            //交换位置
					arr[j]=arr[j+1];
					arr[j+1]=temp;
				}
			}
		}
	}
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值