冒泡排序、插入排序、选择排序、快速排序代码实现

冒泡排序

原理:冒泡排序,就是如同一个一个气泡一样有规律的冒出。在数组的排序实现,就是其中的最值一个个冒出到最后。

//冒泡排序
	public static void bulle(int[] array) {
		
		//冒出最值的次数(array.length-1 最后一个不需要冒泡 自然有序)
		for(int i=0;i<array.length-1;i++) {
			
			//冒泡排序核心:一个一个比较,冒出一个最值
			//array.length-1-i  array.length-1保证数组不会出现越界异常,
                      //每次冒泡后,排序好的不用冒泡比较所以每执行i次就有i次不需要排序
			for(int j=0;j<array.length-1-i;j++) {
				
				//冒出最大值
				if(array[j]>array[j+1]) {
					//交换
					int temp=array[j];
					array[j]=array[j+1];
					array[j+1]=temp;
				}
			}
		}
	}

注意:在交换时 int temp变量应该写在循环外,不然每次交换多会生成一个temp变量浪费了空间。这里写在里边时为了更好的理解程序。 


插入排序 

原理:先取出一个数,接着再取出一个数和之前的的数,放在前或后面排序好,接着就是一个个去数插入已经排序好的数组中。

 

//插入排序
	public static void insertSort(int[] arr) {
		
		for(int i=0;i<arr.length;i++) {//从头一个个取出数arr[i]	
			
			for(int j=0;j<i;j++) {//和排序好的比较  数组下标从0到(i-1)已经排序好
				if(arr[i]<arr[j]) {
					int temp=arr[j];
					arr[j]=arr[i];
					arr[i]=temp;
				}
			}
		}
	}

 


选择排序

原理:找到数组最值的下标,通过下标实现把数放在指定位置(这里是把最值放在开头)。接着在剩余元素里边继续找最值,放到数组指定位置。

	//选择排序
	public static void selectSort(int[] arr) {
                //查找最值次数
		for(int j=0;j<arr.length;j++) {

			int key=j;//默认最值下标为剩余数组第一个
			for(int i=j;i<arr.length;i++) {
				
                        //找到最值
				if(arr[i]<arr[key]) {
					key=i;//剩余元素最值下标
				}
			}
                    //把最值放在数组前j的位置
			int temp=arr[j];
			arr[j]=arr[key];
			arr[key]=temp;
		}
	}

快速排序

原理:第一次从数组中挑出一个数(一般用第一个数),通个比较把小于和大于它的数有规律放在它的两侧,一侧为大于它的一侧为小于它的,不需要在意左右两侧的顺序只需用挑出的数进行分开就行。接着对左、右两测分别进行之前的操作,取出一个数,然后小于和大于它的数分类。如此重复直到不能分为止数组就实现了排序。

这是转载的快速排序视频链接:快速排序视频

	//快速排序
	public static void quickSort(int[] arr, int left,int right){
		if(left>=right) {
			return;
		}
		int temp=arr[left];
		int i=left;
		int j=right;
		while(i!=j) {
			//找到左右两数
			while(arr[j]>=temp&&i<j) {
				j--;
			}
			while(arr[i]<=temp&&i<j) {
				i++;
			}
			//交换
			int t=arr[j];
			arr[j]=arr[i];
			arr[i]=t;
		}
		//跳出循环  中间数和基数交换
		arr[left]=arr[i];
		arr[i]=temp;
		
		//递归排完所有
		quickSort(arr,left,i-1);
		quickSort(arr,i+1,right);
    }

 


转载一下在别的地方看到的写的很好很详细的排序文章:十大经典排序算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值