/** 冒泡 */
public static void bober(int[] array){
int length = array.length;
for(int i=0;i<length-1;i++){ /** 每两个比较一次,总次数是 length-1 */
for(int j=0;j<length-1-i;j++){ // 每次总有一个最大的找出 -i
if(array[j]>array[j+1]){
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
}
/** 快排 */
public static void quickSort(int[] array,int left,int right){
if(array==null){
return;
}
int length = array.length;
if(length == right){ // 防止输入数组的非下标长度,造成越界
right = right -1;
}
if(left > right){
return;
}
int low = left;
int hight = right;
int key = array[left];
while(low<hight){
while(low<hight && array[hight]>=key){
hight --;
}
array[low] = array[hight];
while(low<hight && array[low]<=key){
low++;
}
array[hight] = array[low];
}
array[low] = key; /** 被比较的数此时应该回到 low 位置 */
quickSort(array,left,low-1);
quickSort(array,low+1,right);
}
/** 二分查找 */
public static int binary(int[] array, int value){
int low = 0;
int high = array.length - 1; // 防止越界
while(low <= high){
int middle = (low + high) / 2;
if(value == array[middle]){
return middle; // 下标
}
if(value > array[middle]){
low = middle + 1;
}
if(value < array[middle]){
high = middle - 1;
}
}
return -1;
}
手写排序算法--冒泡,快排,二分
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 冒泡排序 - (void)bubbleSort { NSArray* nums =@[@(8),@(3),@(4)...
- // 折半查找 int search(int *a, int n, int key) { int min, m...
- 知识扩充:时间复杂度:算法的时间复杂度是一个函数,描述了算法的运行时间。时间复杂度越低,效率越高。自我理解:一个算...
- Java基础算法:堆排,快排,二分查找 1. 堆排 满二叉树:所有叶结点都有同样的深度,每个内部结点都有两个儿子 ...