三种简单排序算法理解(冒泡排序,选择排序,简单排序)

一、冒泡排序

概念:每一次比较相邻的两个元素,如果它们的顺序不是正确的,就将它们交换位置。一直重复的进行,直到循环结束。每一次的排序会得到一个最大值或者一个最小值。

/**
 * author:luomeng
 * 冒泡排序演示
 */
class MaoPaoSort {
	public static void main(String[] args) {
		int[] array = {2,3,1,54,23,12,45,13,5};
		int[] a = Mao(array);
		display(a);
		System.out.println();
	}

	/*
		使用两个循环结构,一个是从第一个数组元素开始循环
		第二个是从第二个数组元素开始循环然后和第一个循环的下标元素比较大小
		如果第一个元素大于后面的那个元素就交换位置
		每一次的排序可以得到一个最大值或者一个最小值
	**/
	public static int[] Mao(int[] arr){
		for(int i=0;i<arr.length;i++){
			for(int a =i+1;a<arr.length;a++){
				if(arr[i] > arr[a]){
					int temp = arr[i];
					arr[i] = arr[a];
					arr[a] = temp;
				}
			}
			System.out.println("第"+i+"次排序数组:");
			display(arr);
		}
		return arr;
	}

	//遍历显示数组
	public static void display(int[] array){
		for(int i=0;i<array.length;i++){
			System.out.print(array[i]+" ");
		}
		System.out.println();
	}
}

冒泡排序的最好情况就是当整个数组都是有序的时候,只需要n-1次就可以完成;如果是倒序就需要n(n-1)/2次。

二、选择排序

概念:每一次从待排序的数据元素中选出一个最大或者最小的元素,放在列表的起始位置,直到全部待排序的元素都排序完为止。也就是说:每一次排序的时候,会先去找到一个最大或者最小的元素放在起始位置,第二次也是这样。选择排序是一种不稳定的排序。

/**
 * author:luomeng
 * 选择排序代码演示
 */
public class ChoiceSoryt {

	public static void main(String[] args) {
		int[] array = {2,3,1,54,23,12,45,13,5};
		System.out.println("未排序的数组顺序为:");
		display(array);
		array = sort(array);
		System.out.println("--------------------------");
		display(array);
	}

	/**
		选择排序:
			
	*/
	public static int[] sort(int[] array){
		for(int i=0;i<array.length-1 ;i++){
			int min = i;
			//每轮需要比较的次数
			for(int j=i+1;j<array.length;j++){
				//当前一位数组元素小于后一位的数组元素
				if(array[i] > array[j]){
					min = j;//记录目前能找到的最小值元素的下标
				}
			}
			//将找到的最小值和i位置所在的值进行交换
			if(i != min){
				int temp = array[i];
				array[i] = array[min];
				array[min] = temp;
			}
			//第i轮排序的结果,显示每一轮排序的结果以便分析
			System.out.println("第"+(i+1)+"轮排序后的结果为:");
			display(array);
		}
		return array;
	}
	//遍历显示数组方法
	public static void display(int[] array){
		for(int i=0;i<array.length;i++){
			System.out.print(array[i]+" ");
		}
		System.out.println();
	}
}

三、插入排序

概念:有一个已经排序好的数据序列,要求在这个数据序列中插入一个数, 并保持这个数据序列在数据插入之后仍然有序,这个时候就可以使用插入排序,当然这个也适合于把一个无序的数据序列,排成相应的有序数据。
适合于少量数据的排序,是最为稳定的排序方法。插入排序需要将数据分为两个部分,一部分是已经排好序的数据,另一部分是待排序的数据,与排好序的位置数据相比较,将这个待排序数据放到相应的位置。

/**
 * author:luomeng
 * 插入排序算法演示
 */
class InsertSort {
	public static void main(String[] args) {
		int[] array = {4,2,34,456,3,23,45,1};
		//未排序的数组顺序
		System.out.println("未排序的数组顺序为:");
		display(array);
		System.out.println("------------------------");
		array = sort(array);
		System.out.println("------------------------");
		System.out.println("经过插入排序之后的数组顺序为:");
		display(array);
		
	}
	/**
		创建方法用来演示插入排序对数组的排序,
			想法:首先是把数组分成两个部分,一部分是数组的第一个元素(因为我们是从下标为1的元素开始遍历的数组,也就是
			从第二个元素开始),第一个元素位置不变,这就是第一部分;第二部分就是剩下的元素,将剩下的元素一个一个的与前面
			的元素相比较,如果比前面的那个元素小,就放在它的前面,如果比它大,就不变。这样一个一个的比较,最终就可以得到
			一个有序的数组。
	*/
	public static int[] sort(int[] array){
		int j;
		//从下标为1的元素开始选择合适的位置插入,因为下标为0的元素只有一个,默认是有序的
		for(int i=1;i<array.length;i++){
			int tmp = array[i];//记录插入的数据34
			j = i;
			while(j>0 && tmp<array[j-1]){//从已经排序的序列最右边的开始比较,找到比其小的数
				array[j] = array[j-1];//向后挪动
				j--;
			}
			array[j] = tmp;//存在其小的数,插入
		}
		//2,,4,34
		return array;
	}

	//遍历显示数组
	public static void display(int[] array){
		for(int i=0;i<array.length;i++){
			System.out.print(array[i]+" ");
		}
		System.out.println();
	}
}

-----------------------------欢迎指导-----------------------luo-----------an----------------
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值