导读:
对于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;
}