您的位置:首页 > 其它

排序及二分查找

2017-04-01 14:00 232 查看
/**
* @className:TwoDivide.java
* @classDescription:排序和二分查找
* @author:jiangmianyue
* @createTime:2011-6-15
*/

public class TwoDivide {

/**
* 冒泡排序
*
* @author jiangmianyue
* @createTime 2011-6-15
* @param args
*/
public static void main(String[] args) {
int[] aa = new int[] { 1, 8, 18, 38, 98, 218, 982, 1189 };

// 冒泡排序
System.out.println("排序前");
for (int i = 0; i < aa.length - 1; i++) {
System.out.println(aa[i]);
}
for (int i = 1; i < aa.length; i++) {
for (int j = 0; j < aa.length; j++) {
if (aa[i] < aa[j]) {
aa[i] = aa[i] + aa[j];
aa[j] = aa[i] - aa[j];
aa[i] = aa[i] - aa[j];
}
}
}
System.out.println("排序后");
for (int i = 0; i < aa.length; i++) {
System.out.println(aa[i]);
}

System.out.println("第二种排序");
for(int i = 0; i < aa.length - 1; i++){
for(int j = 0; j < aa.length - i -1; j ++){
if (aa[j] < aa[j + 1]){
aa[j] = aa[j] + aa[j + 1];
aa[j + 1] = aa[j] - aa[j + 1];
aa[j] = aa[j] - aa[j + 1];
}
}
}
for (int i = 0; i < aa.length; i++) {
System.out.println(aa[i]);
}
System.out.println(doOrder(aa, 100));

}

/**
* 二分查找
*
* @author jiangmianyue
* @createTime 2011-6-15
* @param aa
*            数组
* @param a
*            要查找的值
* @return 返回在数据中的位置
*/
public static int doOrder(int[] aa, int a) {
int low = 0; // 数组的最小值小标
int hight = aa.length - 1; // 数组的最大值下标
// while条件是当low小于等于hight时执行
while (low <= hight) {
// 取数组的中间下标
int middle = (hight + low) / 2;
if (a < aa[middle]) {
// 当要查找的值小于中间值的时候把中间值减1赋值给最大值
hight = middle - 1;
} else if (a > aa[middle]) {
// 当要查找的值大于中间值的时候把中间值加1赋值给最小值
low = middle + 1;
} else {
// 最后得出的中间值为要的下标值
return middle;
}
}
return -1;
}
}

 

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