冒泡排序
1、冒泡排序
复杂度:比较次数(n-1)*n/2
static int[] a = {2,1,19,23,13,81,4};
public static void sort () {
for(int i = a.length-1;i >0;i--) {
for (int j=0;j<i;j++) {
if(a[j]>a[j+1]) {
int temp = a[j];
a[j] = a[j+1];
a[j+1] =temp;
}
}
}
for(int i=0;i<a.length;i++) {
System.out.println(a[i]);
}
}
}
2、选择排序
比较次数同冒泡,交换次数变少.
public static void SelectionSort() {
int[] b = {5,1,19,13,1,0};
// 外层循环
for(int i =0; i<b.length; i++) {
// 内层循环
int min =i;
for(int j=i+1;j<b.length;j++) {
if(b[j] < b[min]){
min = j;
}
}
if(min !=i) {
int temp = b[i];
b[i] = b[min];
b[min] = temp;
}
}
for(int i=0;i<b.length;i++) {
System.out.println(b[i]);
}
}
3、折半查找
复杂度:n/2,分m次
n/2^m=1
所以时间复杂度为:log2(n)
/*
二分法查找,折半查找
*/
public static void test() {
int[] a={1,2,3,5,6,7,8,9,13};
int index = binarysearch(a,13);
System.out.println(index);
}
public static int binarysearch(int[] data,int value) {
int begin=0;
int end=data.length-1;
while(begin<=end) {
int mid=(begin+end)/2;
if(data[mid] == value){
return mid;
}else if(value >data[mid]) {
begin = mid+1;
}else if(value <data[mid]) {
end = mid -1;
}
}
return -1;
}
}