第九讲 数组排序算法:冒泡排序、选择排序、插入排序及二分查找技术

来源:互联网 发布:oracle数据库有可视化 编辑:程序博客网 时间:2024/05/29 00:33

导读:

对于Java数组元素的排序是很重要,因为在商业开发中,对于数据的排序处理是很常用的技术之一。所以呢,今天就以例子和分析来阐述一下我们为什么要学习Java数组元素的排序,否则我们学来到底是干嘛用的都不知道。岂不是儿戏了?嗯,所以我们对于这些算法要精通,更要知道怎么在实际的开发中做到灵活使用,而能够灵活使用的唯一根本就是对技术点的核心有很好掌握和认识。


第一、冒泡排序算法


①、所谓冒泡,我们可以想象一下,小时候去有用,在河底潜水的时候宁叔放了一连串的屁哦!然后最小的那个就会飞快地冒到河面,嘣的一下爆了,(然后很臭,哈哈~)对,其实原理就是这样,代入Java数组中就如此:一系列的数据在一个数组容器里面,最小的那个像那个臭屁一样,快速冒起来,然后最大的那个数就在后面了。自然而然形成了升序排列,当然,您可以在程序中控制它成为降序排列都是ok的。

代码如下——

public static void bubbleSort(int[] array)

{

for(int i = 0 ; i < array.length; i++)

{

for(int j = 0 ; j < array.lenght-1-i ; j++)

{

if(array[j]>array[j+1)

{

int temp = array[j] ;

array[j] = array[j+1];

array[j+1] = temp;

}

}

}

}

  代码解释:

因为数组是连续存储的,也就是说,这个循环目的在于把数组从第一个位置开始到最后一个搜索一次,看看哪一个比较大。而用array[j]是前一个对array[j+1]相邻的一个来比较,所以它核心思想是相邻两个元素进行比较,大的那个在后面,小的那个被推到前面的位置了,以此类推。最后小的元素都在左边,而大的呢,在右边了。ok,这就完成了排序。在日常用,我们把价格高的商品的id可以做这些操作,让用户得到最低价或者最高价具有异曲同工之妙。


第二、选择排序我们来看看代码——

//选择排序
public class SelectionSort {
    public static void main(String[] args) {
        int[] arr={1,3,2,45,65,33,12};
        System.out.println("交换之前:");
        for(int num:arr){
            System.out.print(num+" ");
        }        
        //选择排序的优化
        for(int i = 0; i < arr.length - 1; i++) {// 做第i趟排序
            int k = i;
            for(int j = k + 1; j < arr.length; j++){// 选最小的记录
                if(arr[j] < arr[k]){ 
                    k = j; //记下目前找到的最小值所在的位置
                }
            }
            //在内层循环结束,也就是找到本轮循环的最小的数以后,再进行交换
            if(i != k){  //交换a[i]和a[k]
                int temp = arr[i];
                arr[i] = arr[k];
                arr[k] = temp;
            }    
        }
        System.out.println();
        System.out.println("交换后:");
        for(int num:arr){
            System.out.print(num+" ");
        }
    }
}


第三、插入排序算法

代码如下——

插入排序

public void insertSort(int a[]) {   
  
    int n = a.length;   
  
    for (int i = 1; i < n; i++) { //将a[i]插入a[0:i-1]   
  
      int t = a[i];   
  
      int j;   
  
      for (j = i - 1; j >= 0 && t < a[j]; j--) {   
  
        a[j + 1] = a[j];   
  
      }   
  
      a[j + 1] = t;   
  
    }   
  
}  


第四、二分法算法

代码如下——

public static int binarySearch(int[] arr, int target) {  
        if (arr != null) {  
            int min, mid, max;   
            min = 0; // the minimum index  
            max = arr.length - 1; // the maximum index  
            while (min <= max) {  
                mid = (min + max) / 2; // the middle index  
                if (arr[mid] < target) {  
                    min = mid + 1;  
                } else if (arr[mid] > target) {  
                    max = mid - 1;  
                } else {  
                    return mid;  
                }  
            }  
        }  
        return -1;  
    }  

阅读全文
0 0
原创粉丝点击