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

1.冒泡排序

这种排序方式是最简单的,4, 3, 6, 7来当作一个例子(从小到大排序),每一次进行排序先选择第一个4与后面的3进行比较然后4比3大交换位置,4与6比较6大不变,6与7比较7大不变,这样一趟之后最大的值就到了最后的位置。依次进行一共是n-1次就完成了排序。

public class Test15 {
	public static void main(String[] args) {
		int arr[] = { 4, 3, 6, 7, 2, 9, -4, -90, 67, 88, 4 };
		buddleSort(arr);
		System.out.println(Arrays.toString(arr));
	}

	public static void buddleSort(int arr[]) {
		int temp = 0;
		boolean flag = false;//这里是一个优化,进行一个循环的比较之后,发现没有交换了,说明已经排序好了
		for (int i = 1; i < arr.length; i++) {//一共需要n-1次
			for (int j = 0; j < arr.length - i; j++) {//arr.length - i,这里的意思是,经过一个循环之后最大的值已经到了最后了,就没有必要再去比较了
				if (arr[j] > arr[j + 1]) {//当这个数大于后一个数的时候,进行交换
					temp = arr[j];
					arr[j] = arr[j + 1];
					arr[j + 1] = temp;
					flag = true;//这里是一个标志,表示进行了交换
				}
			}
			if (!flag) {//当flag=false的时候就出现了没有交换的情况,就没有必要继续循环了
				break;
			} else {
				flag = false;//把前面交换后的true变为false
			}
		}
	}

}

2.选择排序

选择排序也是一个内排序,4, 3, 6, 7,还是这个例子,你第一次选择是在arr[0]-arr[n]中选择最小的(升序)的值然后与arr[0]进行交换,第二次就是在arr[1]-arr[n]中选择最小的值然后与arr[1]进行交换,一直重复就可以了。

public class Test16 {
	public static void main(String[] args) {
		int arr[] = { 4, 3, 6, 7, 2, 9, -4, -90, 67, 88, 4 };
		selectSort(arr);
		System.out.println(Arrays.toString(arr));
	}

	public static void selectSort(int arr[]) {
		for (int i = 0; i < arr.length - 1; i++) {//只需要n-1次就可以了
			int min = arr[i];//先选择数组中的一个值为最小值
			int minlength = i;//记录最小值的下标
			for (int j = i + 1; j < arr.length; j++) {//从最小值的后一位开始,一直到最后
				if (min > arr[j]) {//当最小值大于arr[j]
					min = arr[j];//重新选择最小值
					minlength = j;//重新记录最小值下标
				}
			}
			if (i!=minlength) {//这里是为了不必要的交换,因为要是原来选择的就是最小值了就没有必要交换了
				arr[minlength] = arr[i];
				arr[i] = min;
			}
		}
	}

}

3.插入排序

最后一种排序了,这个排序也是很简单,其实排序中难的还是快速排序,归并排序和堆排序,其他的还是简单的。
4, 3, 1, 7,还是这个例子,插入排序就是,先选择第一个4,然后再选择4后面一个就是3,3和4进行比较如果3小于4就让4移到3的位置,3就移到4的位置,3 4 1 7.然后选择1,1与4比较,1小于4把1与4交换,1再与3比较,1小于3,再交换,就是这样,直到最后一个。

public class Test17 {
	public static void main(String[] args) {
		int arr[] = { 4, 3, 6, 7, 2, 9, -4, -90, 67, 88, 4 };
		insertSort(arr);
		System.out.println(Arrays.toString(arr));
	}
	public static void insertSort(int arr[]) {
		for (int i = 1; i < arr.length; i++) {//从数组第二个开始
			int insert=arr[i];//保存第二个数,就是要往前面插入的数
			int insetIndex=i-1;//记录要插入的数的前一个
			while (insetIndex>=0&&insert<arr[insetIndex]) {//当要插入的数小于前面的数
				arr[insetIndex+1]=arr[insetIndex];//这里大家可能觉得有点怪,这是因为虽然往后移了,但是要插入的数我是保存的,所以没有丢失
				insetIndex--;//这里要进行减减的操作,因为要往前面继续判断,前面可能还有值会小于要插入的值
			}
			arr[insetIndex+1]=insert;//insetIndex+1这个大家需要思考一下,这是因为前面在循环里是做了一个减减的操作,这里必须要加上,
			//要是没有进入循环这里也是要进行加的操作因为是要插入到后面,其实就没有动
		}
	}

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值