这个星期重新整顿了一些基本查找排序算法的实现,我承认自己不是一个很灵光的码农,还搞了几个小时才把这些最基本的代码给码出来。。。

查找:

1、基本查找:针对无序的数组查找一般只有从头部(下标0)依次查找,如果查找成功返回数组下标,查找失败返回-1

private static int commonSearch(int[] a, intb) {if (a == null)return -1;int len =a.length;for (int i = 0; i < len; i++) {if (a[i] ==b)returni;
}return -1;
}


2、二分查找:针对有序表的查找,依次从数组下标的middle值找起,该值如果大于要查找值,则从该下标前部分继续查找,如该值小于要查找值,从该下标后半部分查找;查找成功

返回。查找失败返回-1.该算法时间复杂度可以只是O(logN),速度较快。

private static int binarySearch(int[] a, intb) {if (a == null)return -1;int low = 0;int high = a.length - 1;while (low <=high) {int middle = (low + high) / 2;if (b ==a[middle])returnmiddle;if (b >a[middle])
low= middle + 1;elsehigh= middle - 1;
}return -1;
}

二分查找

查找算法还有分块查找,二叉树查找,b树查找,hash查找木有实现,暑假的时候再来实现

排序:

1、插入排序:插入排序是依次将第n个元素插入到前n-1个已经排好序的元素中。即对于前n-1个已经排好序的元素,当第n个元素需要排序时,我们拿这个元素依次同前面的元素比较,如果该元素小于前面的元素时,就需交换二者的位置。时间复杂度O(n2),稳定排序。

本处实现的是带哨兵的插入排序,要求数组第一个元素不是有意义的元素,那么比较一个值a的时候可以将自己先放入第一个元素,则当a依次向前比较时,不用关心数组下标是否越界,因为比较到第一个元素时,a

1 private static int[] insertSort(int[] a) {2 if (null ==a)3 return null;4 int len =a.length;5 int[] b = new int[len + 1];6 System.arraycopy(a, 0, b, 1, len);7 for (int i = 2; i <= len; i++) {8 b[0] =b[i];9
10 for (int j = i - 1; b[j] > b[0]; j--) {11 b[j + 1] =b[j];12 b[j] = b[0];13 }14 }15
16 System.arraycopy(b, 1, a, 0, len);17 returna;18 }

插入排序

2、直接选择排序:依次在剩下的n-i个元素中选择一个最小的元素添加到前面已经排好序的i个元素之后。稳定排序,时间复杂度O(n2)。

是我个人觉得最烂的排序方式。。。无论怎样,这个排序也要神经兮兮的比较O(n2)次

private static int[] chooseSort(int[] a) {if (null ==a)return null;int len =a.length;for (int i = 0; i < len - 1; i++) {int min =i;for (int j = i + 1; j < len; j++)if (a[j]