排序算法个人笔记1

1、冒泡算法 这个算法代码比较简单,它的核心是做第i轮排序就会把第i大的值放到后面,比如第一轮将最大的值放到最后,第二轮将第二大的值放到倒数第二。时间度复杂度为O(n的平方),空间复杂度为O(1),可以进行的优化是在第一个for循环时声明一个布尔值变量用来判断是否在第二个for循环中进行了交换变值,如果没有就认为此时的序列已经是有序的。

2、选择排序 这个算法是先定一个k 再用j往后找到比k小的 将此时的j变为k,再用j往后。依次做此操作,最后将k放到此躺排序的前面。 就是只记号,到最后才去比较第i个和第k个 核心思想:只记位置,减少交换次数。 时间复杂度为O(n的平方),空间复杂度为O(1)。

3、插入排序 这个算法很有意思 就跟我们打牌的时候一样,抓一张插一张,认为手里的是有序的。后来的排往里面插,从后往前依次找。先弄一个变量 拿到手上与前面有序的去比较。优化:二分优化 先拿中间的去比 一次去一半 

具体代码如下:

<span style="font-size:18px;">package cn.hncu.sorts;

public class sortWays {
	public static void main(String[] args) {
		int[] a={21,22,5,7,86,57,9,-2,37,-8};
//		bubbleSort(a);//冒泡排序
//		bubbleSort2(a);//优化冒泡排序
//		selectSort(a);
		insertSort(a);
		
		print(a);//输出函数
	}
	//选择插入排序 从后面往前面依次找 先弄一个变量拿到手上,与前面的去比。如果比前面的小,就往前面插,不然就直接放到后面 即a[j+1]=temp。
	private static void insertSort(int[] a) {
		for(int i=0;i<a.length-1;i++){
			int temp=a[i+1];
			int j=i;
			while(a[j]>temp){
				a[j+1]=a[j];
				j--;
				if(j<0){
					break;
				}
			}
			a[j+1]=temp;
		}
	}
	//选择排序
	private static void selectSort(int[] a) {
		for(int i=0;i<a.length-1;i++){
			int k=i;
			for(int j=i+1;j<a.length;j++){
				if(a[k]>a[j]){
					k=j;
				}
			}
			if(k!=i){
				swap(a, i, k);
			}
		}
	}

	//输出函数
	private static void print(int[] a) {
		for(int num:a){
			System.out.print(num+" ");
		}
		System.out.println();
	}
	//1-1冒泡排序函数
	private static void bubbleSort(int[] a) {
		for(int i=0;i<a.length-1;i++){
			for(int j=0;j<a.length-1-i;j++){
				if(a[j]>a[j+1]){
					swap(a,j,j+1);//交换数组位置
				}
			}
		}
	}
	//1-2优化冒泡排序函数
	private static void bubbleSort2(int[] a) {
		for(int i=0;i<a.length-1;i++){
			boolean flag=true;
			for(int j=0;j<a.length-1-i;j++){
				if(a[j]>a[j+1]){
					flag=false;
					swap(a,j,j+1);//交换数组位置
				}
			}
			if(flag){
				break;
			}
		}
	}
	//交换数组位置函数
	private static void swap(int[] a, int j, int i) {
		int temp;
		temp=a[i];
		a[i]=a[j];
		a[j]=temp;
	}

}
</span>




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值