学习笔记--排序、进制转换

本文介绍了三种排序算法——选择排序、冒泡排序和快速排序的原理及实现代码,并提供了进制转换的优化代码示例。
摘要

数组和基本数据类型的内容比较简单不做详细的记录,但是在讲解他们的过程中涉及到的排序和进制转换、拆半查找比较难所以做特别的笔记

1.排序

i.选择排序

思想:在数组中选择出最大的值放在第一位,然后在剩下的之中查找最大的放在剩下数据的第一位,直到剩下的数据为空。

实现代码如下:

public static void sort(int[] x){
		for(int i = 0;i<x.length;i++){
			for(int y = i+1;y<x.length;y++){
				if(x[i]<x[y]){
					int temp = x[y];
					x[y] = x[i];
					x[i] = temp;
				}
			}
		}
	}

ii.冒泡排序

思想:从数组的第二个开始如果这个数比前面的值大就向前移动直到无法移动,直到所有的数都无法移动。

实现代码如下:

public static void sort(int[] x){
		
		for(int i = 1;i<x.length;i++){
			int y = i-1;
			int pos = i;
			for(;y>=0;y--){
				if(x[pos]>x[y]){
					int temp = x[pos];
					x[pos] = x[y];
					x[y] = temp;
					pos = y;
				}else{
					break;
				}
			}
		}
	}

iii.快速排序

思想:选取第一个值作为关键字,从末尾开始查找第一个小于它的值,然后再从开头查找第一个大于它的值,然后进行交换,直到,所有数据完成排序。

注意:这种排序是不稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动

实现代码如下:

public static void quickSort(int[] x,int start,int end){
		
		if(start>=end){
			return;
		}else{
			int pos = getPost(x, start, end);
			if(pos>start){
				int temp = x[pos];
				x[pos]=x[start];
				x[start] = temp;
			}
			quickSort(x,start,pos-1);
			quickSort(x, pos+1, end);
		}
	}

	private static int getPost(int[] x, int start, int end) {
		int l1 = end;
		int l2 = start+1;
		while(l1>=l2){
			for(;l1>=l2;l1--){
				if(x[l1]>x[start]){
					break;
				}
			}
			for(;l2<=l1;l2++){
				if(x[l2]<x[start]){
					break;
				}
			}
			if(l1>l2){
				int temp = x[l1];
				x[l1] = x[l2];
				x[l2] = temp;
			}
		}
		return l1;
	}

2.进制转换

我们知道计算机当中采用二进制进行数据表示,为了简化表示我们有使用八进制和十六进制,八进制用3位二进制表示一位,十六进制用4位表示一位。将十进制转化成对应的进制的时候算法基本一致只是移动的位数和取余数的位数不同而已,所以我们可以进行代码优化,优化后代码如下:


(int num,int offeset){
		
		if(num ==0){
			return "0";
		}else{
			char[] table = new char[]{'0','1','2','3',
										'4','5','6','7',
										'8','9','A','B',
										'C','D','E','F'};
			StringBuilder sb = new StringBuilder();
			int yu = (int) Math.pow(2,offeset )-1;
			while(num!=0){
				sb.append(table[num&yu]);
				num = num>>offeset;
			}
			return sb.reverse().toString();
		}
	}

进制转换如下:

public static String 
trains(100,1);//二进制
trains(100,3);//八进制
trains(100,4);//十六进制

总结

上述所说的内容在实际的开发中很少用到,但是通过理解这些内容,有利于扩展思维,能提高分析能力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值