【排序】冒泡排序法and针对数组的普通查找法和二分查找法
2012-06-14 16:10
239 查看
下面是冒泡排序法的示例代码
冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。
[java] view
plaincopyprint?
package com.jadyer.sort;
/**
* 冒泡排序法
* @see JDK本身也提供了数组排序API,不妨参考一下,即Arrays.sort(array)
*/
public class BubbleSort {
public static void main(String[] args) {
bubbleSort(new int[]{4,6,9,8,3,2});
}
public static void bubbleSort(int[] array){
for(int i=0; i<array.length-1; i++){
for(int j=0; j<array.length-i-1; j++){
if(array[j] > array[j+1]){
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
System.out.print("这是第" + (i+1) + "次排序,排序结果为: ");
for(int k=0; k<array.length; k++){
System.out.print(array[k] + " ");
}
System.out.println();
}
}
}
下面是针对数组的普通查找法和二分查找法的示例代码
[java] view
plaincopyprint?
package com.jadyer.sort;
/**
* 数组查找方式
* @detail 这里演示了普通查找法和二分查找法
*/
public class ArraySearch {
public static void main(String[] args) {
int commonResult = commonSearch(new int[]{1,5,6,7,4,3,9,11,13,14,16,19,21}, 9);
int binaryResult = binarySearch(new int[]{1,3,4,6,7,8,9,12,15,17,18,20,22}, 8);
System.out.println("二分查找法: " + binaryResult);
System.out.println("普通查找法: " + commonResult);
}
/**
* 普通查找法
* @detail 该方式最好理解,同时效率也最低
*/
public static int commonSearch(int[] array, int value){
for(int i=0; i<array.length; i++){
if(value == array[i]){
return i; //返回该元素在数组中的下标
}
}
return -1; //不存在该元素则返回-1
}
/**
* 二分查找法
* @detail 要求数组有序,升序或降序均可
*/
public static int binarySearch(int[] array, int value){
int low = 0; //最小元素值的下标
int high = array.length - 1; //最大元素值的下标
int middle; //中间元素的下标
while(low <= high){
middle = (low+high) / 2;
for(int i=0; i<array.length; i++){
System.out.print(array[i]);
if(i == middle){
System.out.print("#"); //在元素后面用#号标识其为中间元素
}
System.out.print(" "); //各元素间用空格隔开
}
System.out.println();
if(value == array[middle]){
return middle;
}
if(value < array[middle]){
high = middle - 1; //右侧的不要了
}
if(value > array[middle]){
low = middle + 1; //左侧的不要了
}
}
return -1; //不存在该元素则返回-1
}
}
冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。
[java] view
plaincopyprint?
package com.jadyer.sort;
/**
* 冒泡排序法
* @see JDK本身也提供了数组排序API,不妨参考一下,即Arrays.sort(array)
*/
public class BubbleSort {
public static void main(String[] args) {
bubbleSort(new int[]{4,6,9,8,3,2});
}
public static void bubbleSort(int[] array){
for(int i=0; i<array.length-1; i++){
for(int j=0; j<array.length-i-1; j++){
if(array[j] > array[j+1]){
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
System.out.print("这是第" + (i+1) + "次排序,排序结果为: ");
for(int k=0; k<array.length; k++){
System.out.print(array[k] + " ");
}
System.out.println();
}
}
}
下面是针对数组的普通查找法和二分查找法的示例代码
[java] view
plaincopyprint?
package com.jadyer.sort;
/**
* 数组查找方式
* @detail 这里演示了普通查找法和二分查找法
*/
public class ArraySearch {
public static void main(String[] args) {
int commonResult = commonSearch(new int[]{1,5,6,7,4,3,9,11,13,14,16,19,21}, 9);
int binaryResult = binarySearch(new int[]{1,3,4,6,7,8,9,12,15,17,18,20,22}, 8);
System.out.println("二分查找法: " + binaryResult);
System.out.println("普通查找法: " + commonResult);
}
/**
* 普通查找法
* @detail 该方式最好理解,同时效率也最低
*/
public static int commonSearch(int[] array, int value){
for(int i=0; i<array.length; i++){
if(value == array[i]){
return i; //返回该元素在数组中的下标
}
}
return -1; //不存在该元素则返回-1
}
/**
* 二分查找法
* @detail 要求数组有序,升序或降序均可
*/
public static int binarySearch(int[] array, int value){
int low = 0; //最小元素值的下标
int high = array.length - 1; //最大元素值的下标
int middle; //中间元素的下标
while(low <= high){
middle = (low+high) / 2;
for(int i=0; i<array.length; i++){
System.out.print(array[i]);
if(i == middle){
System.out.print("#"); //在元素后面用#号标识其为中间元素
}
System.out.print(" "); //各元素间用空格隔开
}
System.out.println();
if(value == array[middle]){
return middle;
}
if(value < array[middle]){
high = middle - 1; //右侧的不要了
}
if(value > array[middle]){
low = middle + 1; //左侧的不要了
}
}
return -1; //不存在该元素则返回-1
}
}
相关文章推荐
- 【排序】冒泡排序法and针对数组的普通查找法和二分查找法
- Java中的冒泡排序法and针对数组的普通查找法和二分查找法
- Java针对数组的普通查找法和二分查找法
- 二分查找-针对已排序数组
- 一维数组中的一些常用方法(打印数组、逆序、选择排序、冒泡排序、二分法查找、普通查找)
- 剑指offer01--二维排序数组查找元素
- 剑指offer--快速排序递归实现,年龄排序O(N)实现,旋转数组最小值查找
- 【java】输入数组、数组排序及查找数组位置
- 4.数组、排序、查找、二进制运算
- 黑马程序员--05JAVA数组及其排序和查找
- 查找排序数组的插入位置
- 小米笔试:循环排序数组二分查找
- 查找二维排序数组中是否含有某个元素
- 在排序的数组中二分查找一个元素,返回在数组中它第一次出现的位置
- php的数组、排序、查找
- 数组的两种种排序方式和查找方式举例
- JAVA学习笔记(4-2-数组排序|查找)
- leetcode 题解:Search in Rotated Sorted Array II (旋转已排序数组查找2)
- 数组排序后二分查找