您的位置:首页 > 其它

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

2013-11-05 13:45 232 查看

摘要

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

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 [code]trains(100,1);//二进制
trains(100,3);//八进制
trains(100,4);//十六进制


总结

上述所说的内容在实际的开发中很少用到,但是通过理解这些内容,有利于扩展思维,能提高分析能力。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: