数组排序算法

1.冒泡排序
冒泡排序的基本思想是对比相邻的元素值,如果满足条件就交换元素值,把较小的元素移动到数组前面,把大的元素移动到数组后面(也就是交换两个元素的位置),这样较小的元素就像气泡一样从底部上升到顶部。
示例代码:

public class BubbleSort {
	public static void main(String[] args) {
		//创建一个数组,这个数组元素是乱序的
		int[] array={38,7,24,10,16,6};
		//创建冒泡排序类的对象
		BubbleSort bubbleSort=new BubbleSort();
		//调用排序方法将数组排序
		bubbleSort.sort(array);
		
	}
	public void sort(int[] array){
		for (int i = 1; i < array.length; i++) {
			//比较相邻两个元素,较大的数往后冒泡
			for (int j = 0; j < array.length-i; j++) {
				if(array[j]>array[j+1]){
					//把第一个元素的值保存到临时变量中
					int inta=array[j];
					//把第二个元素的值保存到第一个元素单元中
					array[j]=array[j+1];
					//把临时变量保存到第二个元素中
					array[j+1]=inta;
				}
			}
		}
		//遍历数组
		for (int i : array) {
			System.out.print(" "+i);
		}
	}
}

运行结果截图:
在这里插入图片描述
2. 直接选择排序
直接选择排序方法属于选择排序的一种,它的排序速度要比冒泡排序块一些。直接选择排序是将指定排序位置与其他数组元素分别对比,如果满足条件就交换元素值,这里区别冒泡排序,并不是交换相邻元素,而是把满足条件的元素与指定的排序位置交换(如从最后一个元素开始排序),这样排序好的位置逐渐扩大,最后整个数组都成为已排序好的格式。
每一趟从待排序的数组元素中选择最大(或最小)的一个元素,顺序地放在已排好序的数列的最后。算法示例:
在这里插入图片描述
示例代码:

public class SelectSort {
	public static void main(String[] args) {
		//创建一个数组,这个数组元素是乱序的
		int[] array={35,9,23,10,18,5};
		System.out.println("数组排序前:");
		for (int i : array) {
			System.out.print("\t"+i);
		}
		System.out.println();
		//创建直接排序的对象
		SelectSort sorter=new SelectSort();
		//调用排序对象的方法将数组排序
		sorter.sortArray(array);
		
	}
	public void sortArray(int[] array){
		int inta;
		for (int i = 1; i < array.length; i++) {
			inta=0;
			for (int j = 1; j <= array.length-i; j++) {
				if(array[j]>array[inta]){
					inta=j;
				}
			}
			//交换在位置array.length-i和inta(最大值)上的两个数
			//把第一个元素的值保存到临时变量中
			int intb=array[array.length-i];
			//把第二个元素的值保存到第一个元素单元中
			array[array.length-i]=array[inta];
			//把第一个元素的值保存到第二个元素中
			array[inta]=intb;
		}
		//遍历数组
		System.out.println("数组排序后:");
		for (int intc : array) {
			System.out.print("\t"+intc);
		}
	}
}

运行结果截图:
在这里插入图片描述
3.反转排序
反转排序是以相反的顺序把原有数组的内容重新排序,它的实现思路是把数组最后一个元素与第一个元素替换,然后是倒数第二个元素与第二个元素替换,以此类推,直到把所有数组元素反转替换。
反转排序是对数组两边的元素进行替换,所以只需要循环数组长度的半数次,如数组长度为7,那么for循环只需循环3次。
示例代码:

public class ReverseSort {
	public static void main(String[] args) {
		//创建一个数组
		int[] array={10,20,30,40,50,60};
		//创建反转排序类的对象
		ReverseSort sorter=new ReverseSort();
		//调用排序对象的方法将数组反转
		sorter.sort(array);
	}
	public void sort(int[] array){
		System.out.println("数组原有的排序:");
		//遍历数组
		for (int inta : array) {
			System.out.print("\t"+inta);
		}
		System.out.println();
		int temp;
		int num=array.length;//获取数组的长度
		for (int i = 0; i < num/2; i++) {
			temp=array[i];
			array[i]=array[num-1-i];
			array[num-1-i]=temp;
		}
		//反转的过程
		//初始数组资源:[10	20	30	40	50	60]
		//第一趟排序后:60  [20  30  40  50]  10
		//第二趟排序后:60  50 [30  40]  20   10
		//第三趟排序后:60  50  40  30   20 	10
		System.out.println("数组反转后的排序:");
		for (int intb : array) {
			System.out.print("\t"+intb);
		}
	}
}

运行结果截图:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值