冒泡排序和快速排序的Java实现

2019-10-22  本文已影响0人  nzdxwl

算法

冒泡排序

冒泡排序的基本操作是对数组的元素两两比较,较大的往区间后面移动;第一轮将最大的元素移到最后,接着是第二大,照此进行,总共需要进行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);
}

--

上一篇下一篇

猜你喜欢

热点阅读