您的位置:首页 > 编程语言

冒泡 选择 插入排序 二分查找 代码备忘

2016-08-28 09:08 309 查看
//冒泡排序算法
public class Test18{
public static void main(String[] args){
int[] num = {23,2,18,90,7,56};
int temp = 0; //用于作数据交换的临时变量
//外循环控制比较的轮数
for(int i=0;i<num.length-1;i++){

for(int j=0;j<num.length-1-i;j++){

//比较相临的两个数,如果前一个数大于后一个数,那么交换位置
//两个数交换位置通过第三个变量
if(num[j]>num[j+1]){
temp = num[j];
num[j] = num[j+1];
num[j+1] = temp;
}
}
}

//输出结果
for(int i=0;i<num.length;i++){
System.out.print(num[i]+" ");
}
}
}

//23 2 18 90 7 56

//2 18 23 7 56 90  第一轮比较5次
//2 18 7 23 56 90  第二轮比较4次
//2 7 18 23 56 90   第三轮比较3次
//2 7 18 23 56 90   第四轮比较2次
// 2 7 18 23 56 90  第五轮比较1次


<
4000
/p>

//选择排序算法
public class Test19{
public static void main(String[] args){
int[] num = {2,5,2,3,23,100};

int minIndex = 0; //最小数的下标
int temp = 0; //交换临时变量

//比较的轮数
for(int i=0;i<num.length-1;i++){

minIndex = i;  //每轮重新定义最小数的下标
//每轮比较的次数
for(int j=i+1;j<num.length;j++){
if(num[minIndex]>num[j]){
minIndex = j; //先把最小数的下标记录下来
}
}
//交换最小值的位置
if(minIndex!=i){
temp = num[minIndex];
num[minIndex] = num[i];
num[i] = temp;
}
}

//输出:
for(int i=0;i<num.length;i++){
System.out.print(num[i]+" ");
}

}
}

//2 5 18 3 23 100
//2 5 18 3 23 100    --1  5
//2 3 18 5 23 100    --2  4
//2 3 5 18 23 100    --3  3
//2 3 5 18 23 100    --4  2
//2 3 5 18 23 100    --5  1


//直接插入排序算法
public class Test20{
public static void main(String[] args){
int[] num = {2,10,5,22,1};
//要比较的轮数x
for(int i=1;i<num.length;i++){

int temp = num[i];//作为每次需要插入的数
int j = 0;
for(j=i-1;j>=0;j--){
if(num[j]>temp){
num[j+1] = num[j];
}else{
break;
}
}
num[j+1] = temp;
}

//输出
for(int i=0;i<num.length;i++){
System.out.print(num[i]+" ");
}

}
}

// 2 10 5 22 1
// 2 10 5 22 1  第一轮  1
// 2 5 10 22 1  第二轮  2
// 2 5 10 22 1  第三轮  1
// 1 2 5 10 22  第四轮  4


/**
二分查找算法:
1、数列一定是要有序的
2、目的是为了查找一个数在数列中所在的位置
3、查找的平均速度较快,每次查找会排除范围内的一半数据
4、原理:
每次查找比较的数是数列范围中的相对中间值,大于该中间值就从右边找,小于该中间值
就从左边找,直到找到为止,找不到返回-1,表示数列中没有该数
*/
public class BinarySearchDemo {
public static void main(String[] args) {
int[] num = {10,20,30,50,198,300};
System.out.println(binarySearch(num,10));
}
public static int binarySearch(int[] num,int key){
int start = 0;//数组起始位置
int end = num.length-1;//最大的下标
int middle = -1;//中间位置
while(start<=end){
middle = (start+end)/2;
if(num[middle]==key){
return middle;
}else if(num[middle]<key){
start=middle+1;
}else if(num[middle]>key){
end = middle-1;
}
}

return -1;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息