java 排序--由二分法查找演变快速排序法

java 排序: 只要上网搜索。基本是铺天盖地的资源。

但是,我个人觉得很多人的资源,不如我们自己理解的简单。

特别是越厉害的哥们,写起代码就越复杂,

而我们有时需要的是能理解的技术,而不是复杂的技术大眼瞪小眼。

package cc.cm.util;

import java.lang.reflect.Array;
import java.util.ArrayList;

public class Arraytest{

/**二分法查找 必须是一组有序的数组
* @param args
*/
public static void main(String[] args) {
int a[]={1,3,5,7,10};
int index=BinartSearch(a, 5);
System.out.println("5元素在:"+index +"位");
int b[]={12,23,5,27,10,15,82,45,44};
QuickSork(b,0,8);
for (int i = 0; i < b.length; i++) {
System.out.print(b[i]+" ");
}
}
public static int BinartSearch(int array[],int T){
int low,high,mid;
low=0;
high=array.length-1;
while(low<=high){
mid=(low+high)/2;
if(array[mid]<T){
low=mid+1;
}
if(array[mid]>T){
high=mid-1;
}
else
{
return mid;
}

}

return -1;
}
/**
* 快速排序法
* @param array数组的
* @param left最左边的位置
* @param right最右边的位置
基本思想是:
从数组中取出一个元素作为基准值
把其他元素分为两组:
“小的”是那些小于基准值的元素。
“大的”是那些大于基准值的元素,
递归对这两个组做排序。
快速排序快速的原因在于:一旦知道了某个元素比基准值小,它就不需要在与那些大的元素比较。
而大的元素也不需要在与小的元素比较,这个性质使快速排序比简单排序、冒泡排序快的多。
时间复杂度:O(nlogn)
*/
public static void QuickSork(int[] array,int left,int right){
if(array.length<=0){
return ;
}
if(left>=right){
return ;
}
int last;
last=left;//作为一个比基准值得下标
//循环遍历找出这个数组小于比基准值小的元素的个数。进行统计
for (int i = left+1; i <= right; i++) {
if(array[i]<array[left]){
Exchange(array,++last,i);
}
}
Exchange(array, left, last);
QuickSork(array,left,last-1);
QuickSork(array,last+1,right);

}
/**
* 交换数组的两个元素
* @param a
* @param i
* @param j
*/
public static void Exchange(int[] a,int i,int j){
int temp;
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}

北上广深是个高节奏的生活,作为一个新人,很多时候我们都在感叹职位上老人的智慧。以前通过搜索引擎,80%的问题都有答案。那么现在我是觉得90%都会有答案。那么作为我们新人的的核心竞争力到底在哪里?
原文地址:https://www.cnblogs.com/harry-Consonance/p/6594787.html