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

《java入门第一季》之Arrays类前传(排序问题)

2016-05-10 13:20 501 查看
一:冒泡排序
/*
* 数组排序之冒泡排序:
* 		相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处
*
* 引申:
* 利用冒泡排序法,可以获取一个数组的最大值(先冒泡排序,取最后一个值)和最小值(调用冒泡排序,取第一个值)
*/
public class ArrayDemo {
public static void main(String[] args) {
// 定义一个数组
int[] arr = { 24, 69, 80, 57, 13 };
System.out.println("排序前:");
printArray(arr);

//由于可能有多个数组要排序,所以要写成方法
bubbleSort(arr);
System.out.println("排序后:");
printArray(arr);
}

//冒泡排序代码
public static void bubbleSort(int[] arr){
for (int x = 0; x < arr.length - 1; x++) {//外循环控制比较的次数(arr.length-1)轮
for (int y = 0; y < arr.length - 1 - x; y++) {// arr.length - 1是为了防止数据越界,// arr.length - 1 - x是为了减少比较的次数
if (arr[y] > arr[y + 1]) {//前面的数大于后边的数。交换
int temp = arr[y];
arr[y] = arr[y + 1];
arr[y + 1] = temp;
}
}
}
}

// 遍历功能
public static void printArray(int[] arr) {
System.out.print("[");
for (int x = 0; x < arr.length; x++) {
if (x == arr.length - 1) {
System.out.print(arr[x]+"]");
} else {
System.out.print(arr[x] + ", ");
}
}
}
}


二:选择排序

/*
* 数组排序之选择排序:
* 		从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处
*/
public class ArrayDemo {
public static void main(String[] args) {
// 定义一个数组
int[] arr = { 24, 69, 80, 57, 13 };
System.out.println("排序前:");
printArray(arr);

//用方法改进
selectSort(arr);
System.out.println("排序后:");
printArray(arr);

}

public static void selectSort(int[] arr){
for(int x=0; x<arr.length-1; x++){//总共进行arr.length-1轮
for(int y=x+1; y<arr.length; y++){
if(arr[y] <arr[x]){//如果后面的数小于前面的数,交换,始终使得前面的为小值
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
}
}
}

// 遍历功能
public static void printArray(int[] arr) {
System.out.print("[");
for (int x = 0; x < arr.length; x++) {
if (x == arr.length - 1) {
System.out.print(arr[x]);
} else {
System.out.print(arr[x] + ", ");
}
}
System.out.println("]");
}
}


三:二分查找

/*
* 查找:
* 		基本查找:数组元素无序(从头找到尾)
* 		二分查找(折半查找):数组元素有序
*
* 分析:
* 		A:定义最大索引,最小索引
* 		B:计算出中间索引
* 		C:拿中间索引的值和要查找的值进行比较
* 			相等:就返回当前的中间索引
* 			不相等:
* 				大	左边找
* 				小	右边找
* 		D:重新计算出中间索引
* 			大	左边找
* 				max = mid - 1;
* 			小	右边找
* 				min = mid + 1;
* 		E:回到B
*/
public class ArrayDemo {
public static void main(String[] args) {
//定义一个数组
int[] arr = {11,22,33,44,55,66,77};

//写功能实现
int index = getIndex(arr, 33);
System.out.println("index:"+index);

//假如这个元素不存在后有什么现象呢?
index = getIndex(arr, 333);
System.out.println("index:"+index);//-1
}

public static int getIndex(int[] arr,int value){
//定义最大索引,最小索引
int max = arr.length -1;
int min = 0;

//计算出中间索引
int mid = (max +min)/2;

//拿中间索引的值和要查找的值进行比较
while(arr[mid] != value){//while实现循环
if(arr[mid]>value){//大
max = mid - 1;//左边找
}else if(arr[mid]<value){//小
min = mid + 1;//右边找
}

//加入判断
if(min > max){//找不到
return -1;
}

mid = (max +min)/2;//重新取新一轮数组的中间值
}

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