一.排序常见的两种方法 一个是冒泡法排序 一个是直接排序 性能上冒泡法排序 优于直接排序
/**
*
* @Title: bubbleSort
* @Description:使用冒泡法排序 (升序)
* @author: lizhang
* @date: 2018年11月19日 上午9:33:01
* @param arr 需要排序的数组
* @throws
*/
public static void bubbleSort(int[] arr) {
for(int i = 0;i<arr.length-1;i++) {
for(int j=0;j<arr.length-1-i;j++) {
if(arr[j]>arr[j+1]) {
int temp = arr[j];
arr[j]= arr[j+1];
arr[j+1] = temp;
}
}
}
}
/**
*
* @Title: selectSort
* @Description:直接排序(升序)
* @author: lizhang
* @date: 2018年11月19日 上午9:37:45
* @param arr 需要排序的数组
* @throws
*/
public static void selectSort(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]) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
二.使用二分法查找数组中是否存在某个值
/**
*
* @Title: halfSeach
* @Description:二分法查找数组中是否有传入的数字
* @author: lizhang
* @date: 2018年11月19日 上午10:15:29
* @param arr 数组
* @param key 查询的值
* @return int 返回-1表明次数组没有 key值 反之则返回数组的下标
* @throws
*/
public static int halfSeach(int[] arr,int key) {
int min = 0;
int max = arr.length-1;
int mid = (min+max)/2;
while(arr[mid] != key) {
if(key>arr[mid]) {
min = mid+1;
}else if(key<arr[mid]) {
max = mid-1;
}
if(min>max) {
return -1;
}
mid = (max+min)/2;
}
return mid;
}
三.数组的去重
/**
*
* @Title: removeRepetition
* @Description: 去除数组中重复的元素 返回一个新的数组
* @author: lizhang
* @date: 2018年11月21日 下午4:43:50
* @param arr 原数组
* @return int[] 新数组
* @throws
*/
public int[] removeRepetition(int[] arr) {
int count = 0;
//统计重复元素的个数
for(int i = 0;i<arr.length-1;i++) {
for(int j=i+1;j<arr.length;j++) {
if(arr[i]==arr[j]) {
count++;
break;
}
}
}
//创建新数组
int[] newArr = new int[arr.length-count];
//将原数组中的不重复元素放入到新数组中
int index = 0;
for(int i = 0;i<arr.length;i++) {
boolean flag = false;
int temp = arr[i];
for(int j=0;j<newArr.length;j++) {
if(temp==newArr[j]) {
flag=true;
break;
}
}
if(!flag) {
newArr[index++] = arr[i];
}
}
return newArr;
}