冒泡排序、选择排序和插入排序

冒泡排序:相邻的两个元素进行比较,如果两者之间的排序不符合要求,就相互交换位置。每一轮比较都可以确定本轮参与比较的元素中最大元素的正确位置,一旦确定一个最大值,该元素就不再参与下一轮的比较

import java.util.Arrays;

public class Bubble_Sort { //冒泡排序

	public static void main(String[] args) {
		int[] arr={8,6,4,9,0,1,5,7,2,3};
		for (int i = 0; i < arr.length; i++) {	// 外层循环控制比较的轮次数
		/*
		 * 两两比较,所以第1轮参与比较的数为arr.length- 1
		 * 此外,每过一轮,都会确定一个最大数的位置,因此第i轮参与比较的数为arr.length-1-i
		 */
			//内层循环进行本轮比较,并按照规则顺序交换位置
			for (int j = 0; j < arr.length- 1 - i; j++) {
				int nextIndex = j + 1;
				if (arr[j] > arr[nextIndex]) {
					// 如果相邻两数左边的比右边的大,则交换位置,即将最大数往后移
					int temp = arr[nextIndex];
					arr[nextIndex] = arr[j];
					arr[j] = temp;
				}
			}
		System.out.println(Arrays.toString(arr));
		}
	}
}

选择排序:每个数看一下,比较选最小值,交换到最前面,一旦确定一个最小值,该元素就不再参与下一轮的比较

import java.util.Arrays;

public class Selection_sort {//选择排序

	public static void main(String[] args) {
		int[] arr={8,6,4,9,0,1,5,7,2,3};
		  for(int i=0;i<arr.length-1;i++){ //外层循环控制轮次数
		       int index=i; //记录当前位置
	           for(int j=i+1;j<arr.length;j++){//内层循环找当前最小数
	                if(arr[j] < arr[index]){
			         index=j; //记录最小数位置
	                }		            
		    }
	           //将最小数交换到当前的最前面
	           int temp=arr[index];
	           arr[index]=arr[i];
	           arr[i]=temp; 
	           System.out.println(Arrays.toString(arr));	
	       } 
	}
}

插入排序:将原来的排列分成两部分看,前面一部分看成有序排列(最初只有一个元素),后面一部分还是看作原来的无序排列,然后按照顺序依次让无序排列中的元素插队到有序排列中,插入的位置需要符合排序的要求,当无序排列中的人全部都插队到了有序排列中后,最后得到的就是我们所需要的排序结果

 

import java.util.Arrays;

public class Insertion_sort { //插入排序

	public static void main(String[] args) {
		int[] arr={9,6,5,8,7,3,4,1,2,0};
		//外层循环控制插入身高的轮次数
		//将原序列中第一个数看作一个有序序列
	    for(int i=1;i<arr.length;i++){
	         int temp=arr[i];//无序序列第一个数是原序列第二个数
	         int leftindex=i-1;
		 while(leftindex >= 0 && arr[leftindex]>temp){
			//前面有序序列的数大,则前面的那个较大数字后退,让位置
			arr[leftindex + 1] = arr[leftindex];
			leftindex --; //无序序列中的数继续和有序序列前面一个数比较
		  }
		// 找到合适的位置后,插入到有序序列对应位置
		 arr[leftindex+1] = temp;
		 System.out.println(Arrays.toString(arr));
	    }
	}
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值