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

JAVA冒泡与选择排序,折半查找

2016-09-21 09:58 330 查看
冒泡集和式:

/**
* 取得的值标为MAX,并将其与IN进行交换,结束一次,进行n-1轮排序后,所得的结果
*
* 冒泡排序:假设有n条数据,则从第0个开始,依次比较第0个和第1个数据
* 如果第0个小于第一个数据,则两者交换,否则什么都不做,继续比较第一个和第二个
* 依次类型,直到所有数据都冒泡到数据顶上
*
* 写排序的时候:1.确定排序规则
*          2.确定计算规则
*/
ArrayList<Integer> oList=new ArrayList<Integer>();
oList.add(3);
oList.add(5);
oList.add(8);
oList.add(7);
oList.add(9);
oList.add(6);
oList.add(2);
oList.add(1);
oList.add(0);
System.out.println(oList);

for (int i = 0; i < oList.size(); i++) {
for (int j = 0; j < oList.size()-i-1; j++) {
if (oList.get(j)<oList.get(j+1)) {
int temp=oList.get(j);
oList.set(j, oList.get(j+1));
oList.set(j+1, temp);
}
}
}
System.out.println(oList);


冒泡数组式:

public static void maopao(int[] arr){
for(int i=0;i<arr.length;i++)
{
for(int j=0;j<arr.length-i-1;j++)
{
if(arr[j]>arr[j+1])
{
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}


选择集和式:

/*
for (int i = 0; i <oList.size()-1; i++) {
int max=oList.get(i);//第一轮获取第n个,接下来去第n+1个到oList.size()-1个
int k=-1;//记录该轮最大值的角标
//获取当前轮最大值
for (int j = i+1; j < oList.size(); j++) {
if (max<oList.get(j)) {//比较该轮所有的值,取最大的值
max=oList.get(j);
k=j;
}
}
if (k!=-1) {
oList.set(k, oList.get(i));//把i角标的值赋给最大值的角标
oList.set(i, max);//把最大值赋值给角标为i的位置
}
}
for (int i = 0; i < oList.size(); i++) {
System.out.print(oList.get(i)+",");
}*/


选择数据式:

public static void PaiMax(int[] arr) {

for(int i=0;i<arr.length-1;i++)
{
for(int j=i+1;j<arr.length;j++)
{
if(arr[i]>arr[j])//arr[i]<arr[j]
{
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
}


折半查找

/**
* 折半查找:强列推荐这样写
* 需求:将一个随机数字插入到有序数组中,问该插入到哪个位置?
*/
public static int halfSearch_2(int[] arr,int key)
{
int min=0;
int max=arr.length-1;
int mid=(min+max)/2;
while (min<=max) {
mid=(min+max)/2;
if (arr[mid]>key) {
max=mid-1;
}else if (arr[mid]<key) {
min=mid+1;
}else {
return mid;
}
}
return min;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: