算法
冒泡排序
冒泡排序的基本操作是对数组的元素两两比较,较大的往区间后面移动;第一轮将最大的元素移到最后,接着是第二大,照此进行,总共需要进行n-1轮,n=数组的长度。
/**
* 冒泡排序
* @param arr
*/
public static void bubbleSort(int[] arr) {
for(int i=arr.length-1;i>0;i--) {//循环n-1次,n=数组长度
for(int j=0;j<i;j++) {
if(arr[j+1]<arr[j]) {
arr[j] = arr[j]^arr[j+1];
arr[j+1] = arr[j]^arr[j+1];
arr[j] = arr[j]^arr[j+1];
}
}
}
}
快速排序
/**
* 快速排序
* @param arr
* @param start
* @param end
*/
public static void quickSort(int[] arr, int start, int end) {
if(end-start<2) return; //退出条件
int l = start, r = end, p = arr[l]; //区间左右索引,以及用来分区的元素
while(l<r) {
while(l<r && arr[r]>p) r--; //从右向左逐个比较,寻找小于p的元素位置
if(l<r) arr[l++]=arr[r]; //如有小于p的元素则移动到左侧
while(l<r && arr[l]<p) l++; //从左向右搜寻大于p的元素
if(l<r) arr[r--]=arr[l]; //如果有则移到右侧
}
arr[l] = p;
quickSort(arr, start, l-1);
quickSort(arr, l+1, end);
}
--
网友评论