java——各种排序“大集合“

排序问题

对自定义字符串一维数组中的元素进行排序

快速排序

package test;

import java.util.Arrays;

public class QuickSort {

	public static void main(String[] args) {
		//声明一个数组并初始化
		int[] arr = {6,1,2,7,9,3,4,5,10,8};
		//快速排序
		quickSort(arr,0,arr.length-1);
		//输出
		System.out.println(Arrays.toString(arr));
	}
	
	/**
	 * 快速排序
	 * @param arr 待排数组
	 * @param low 从左往右搜索的开始索引
	 * @param high 从右往左搜索的开始索引
	 */
	private static void quickSort(int[] arr, int low, int high) {
		//声明开两个变量
		int i=low;
		int j=high;
		//判断
		if (i>j) {
			return;
		}
		//基准数记忆
		int tmp=arr[low];
		//i从左往右搜索的时候,碰到第一个比它大的数,停下来;
		//j从右往左搜索,碰到第一个比它小的数,停下来;需要交换
		//中间变量
		int t=0;
		while(i<j){
			//j从右往左搜索
			while(tmp<=arr[j]&&i<j){
				j--;
			}
			//i从左往右搜索
			while(tmp>=arr[i]&&i<j){
				i++;
			}
			if(i<j){
				//停下来;需要交换
				t=arr[i];
				arr[i]=arr[j];
				arr[j]=t;
			}
		}
		//判断
		//和基准数交换(将基准数归位)
		//if(i==j){
			arr[low]=arr[i];
			arr[i]=tmp;
		//}
		//将前半部分快速排序(被调用6次)
		quickSort(arr, low, i-1);
		//将后半部分快速排序
		quickSort(arr, i+1, high);
	}
}

效果如下

快速排序

选择排序

package test;

import java.util.Arrays;

/**
 * 选择排序法
 * @author Administrator
 *
 */
public class Sell {

	public static void main(String[] args) {
		//创建一个数组,并初始化
		int[] arr = {1,2,3,4,5};
		//声明一个中间变量
		int tmp=0;
		//外循环
		/* i
		 * 0  1: arr[1]>arr[0] arr[2]>arr[0] arr[3]>arr[0] arr[4]>arr[0]
		 * 1  2: arr[2]>arr[1] arr[3]>arr[1] arr[4]>arr[1]
		 * 2  3: arr[3]>arr[2] arr[4]>arr[2] 
		 * 3  4: arr[4]>arr[3] 
		 * */
		//控制趟数
		for (int i = 0; i < arr.length-1; i++) {
			//内循环
			//控制两两比较的次数
			for (int j = i+1; j < arr.length; j++) {
				//比较
				if (arr[j]>arr[i]) {
					tmp=arr[i];
					arr[i]=arr[j];
					arr[j]=tmp;
				}
			}
		}
		//输出arr
		System.out.println(Arrays.toString(arr));
	}
}

选择排序的优化(按最大值索引寻找)

package test;

import java.util.Arrays;

public class Sel2 {
	public static void main(String[] args){
		//声明一个长度为5的数组并初始化
		int[] arr={1,2,3,4,5};
		//存储当前的最大值下标
		int max=0;
		//中间变量
		int tmp=0;
		//外循环
		//趟数
		for (int i = 0; i < arr.length-1; i++) {
			//设置max
			max=i;
			//内循环
			//比较的次数
			for (int j = i+1; j < arr.length; j++) {
				if (arr[j]>arr[max]) {
					max=j;
				}
			}
			//判断跟当初的约定是否一致
			if(max!=i){
				tmp=arr[max];
				arr[max]=arr[i];
				arr[i]=tmp;
			}
		}
		//输出arr
		System.out.println(Arrays.toString(arr));
	}
}

冒泡排序

package test;

import java.util.Arrays;

public class BubbleSort {

	public static void main(String[] args) {
		//声明一个长度为5的数组并初始化
		int[] arr={1,2,3,4,5};
		//中间变量
		int tmp=0;
		//将arr从大往小排序
		/* 	冒泡													 比较次数
		 * 0:arr[1]>arr[0] arr[2]>arr[1] arr[3]>arr[2] arr[4]>arr[3]	  4
		 * 1:arr[1]>arr[0] arr[2]>arr[1] arr[3]>arr[2] 	 				  3
		 * 2:arr[1]>arr[0] arr[2]>arr[1] 	 				  			  2
		 * 3:arr[1]>arr[0]             	 				  			      1
		 * 
		 * */
		//外循环
		//控制趟数
		for (int i = 0; i < arr.length-1; i++) {
			//内循环
			//控制两两比较的次数
			for (int j = 0; j < arr.length-i-1; j++) {
				if(arr[j+1]>arr[j]){
					tmp=arr[j+1];
					arr[j+1]=arr[j];
					arr[j]=tmp;
				}
			}
		}
		//输出arr
		System.out.println(Arrays.toString(arr));
	}
}

效果如下

排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值