二分法两种排序方式思路及实现
2018-03-01 16:35
477 查看
思路:
首先二分法排序必须为有序数组,从中查找某一元素,如果此元素在这个数组中则返回下标,不在则返回-1;
通过数组的长度取其中间值,然后与要查找的元素相比较,如果大于则下次循环应该从左边查找,小于则从右边;
二分法排序快的原因是它并没有循环所有元素,而是折半查询,但是需要有序数组这一必要条件
实现1:普通二分法排序
public static int sortSearch(int[] array, int x) {
int low = 0;
int hi = array.length - 1;
int mid;
while (low <= hi) {
mid = (low + hi) / 2;
if (array[mid] > x) {
hi = mid - 1;
} else if (array[mid] < x) {
low = mid + 1;
} else {
return mid;
}
}
return -1;
}实现2:递归二分法排序
public static int recursion(int[] array, int a, int low, int high) {
if (low <= high) {
int mid = (low + high) / 2;
if (array[mid] > a) {
return recursion(array, a, low, mid - 1);
} else if (array[mid] < a) {
return recursion(array, a, mid + 1, high);
} else {
return mid;
}
}
return -1;
}新增冒泡排序实现:
public static int[] bubbling(int[] array) {
int temp;
for (int i = 0; i < array.length - 1; i++) {
for (int y = 0; y < array.length - 1 - i; y++) {
if (array[y] > array[y + 1]) {
temp = array[y];
array[y] = array[y + 1];
array[y + 1] = temp;
}
}
}
return array;
}
首先二分法排序必须为有序数组,从中查找某一元素,如果此元素在这个数组中则返回下标,不在则返回-1;
通过数组的长度取其中间值,然后与要查找的元素相比较,如果大于则下次循环应该从左边查找,小于则从右边;
二分法排序快的原因是它并没有循环所有元素,而是折半查询,但是需要有序数组这一必要条件
实现1:普通二分法排序
public static int sortSearch(int[] array, int x) {
int low = 0;
int hi = array.length - 1;
int mid;
while (low <= hi) {
mid = (low + hi) / 2;
if (array[mid] > x) {
hi = mid - 1;
} else if (array[mid] < x) {
low = mid + 1;
} else {
return mid;
}
}
return -1;
}实现2:递归二分法排序
public static int recursion(int[] array, int a, int low, int high) {
if (low <= high) {
int mid = (low + high) / 2;
if (array[mid] > a) {
return recursion(array, a, low, mid - 1);
} else if (array[mid] < a) {
return recursion(array, a, mid + 1, high);
} else {
return mid;
}
}
return -1;
}新增冒泡排序实现:
public static int[] bubbling(int[] array) {
int temp;
for (int i = 0; i < array.length - 1; i++) {
for (int y = 0; y < array.length - 1 - i; y++) {
if (array[y] > array[y + 1]) {
temp = array[y];
array[y] = array[y + 1];
array[y + 1] = temp;
}
}
}
return array;
}
相关文章推荐
- 详谈排序算法之交换类排序(两种方法实现快速排序【思路一致】)
- 算法整理(二)---高速排序的两种实现方式:双边扫描和单边扫描
- TreeSet集合排序两种实现方式Comparable和Comparator比较
- (68)TreeSet练习:两种排序方式:自然排序(实现comparable接口)、比较器
- 实现TreeSet定制排序两种方式
- TreeSet的排序两种实现方式Comparator和Comparable
- iOS开发 - 商品详情页两种分页模式,只提供思路和实现方式。
- MySQL 中的ORDER BY两种排序实现方式
- 快速排序两种方式实现及优化总结
- 算法整理(二)---快速排序的两种实现方式:双边扫描和单边扫描
- java 两种方式实现自定义排序
- 黑马程序员 TreeSet排序的两种实现方式
- 算法代码实现之归并排序,C/C++实现,自顶向下与自底向上两种方式
- 直接插入排序的两种实现方式
- TreeSet集合排序两种实现方式Comparable和Comparator比较
- 详谈排序算法之插入类排序(两种思路实现希尔排序)
- 快速排序的两种实现方式,主要是Partition函数的实现原理不一样
- TreeSet集合排序两种实现方式Comparable和Comparator比较
- 常用排序算法之二:直接插入排序的两种实现方式
- 快速排序两种实现方式