数组的排序方法-冒泡排序,选择排序,快速排序

冒泡排序:冒泡排序就是从数组的第一个数据开始,2个数据之间比较,把较大的数字往后面放,如第一个和第二个比较,把较大的数放在后面,然后再用第二个数据和第三个数据进行比较,再次把比较大的一个放在后面,就是2个数据交换位置,把大的数据放在后面,然后一个交换,直到到最后一个位置,然后再从第二个数据开始,2个数据进行交换,一直到整个数组交换完成。

代码实现:


let a=[1,4,7,9,27,2,8];
//冒泡排序,每一趟找出最大的,总共比较次数为arr.length-1次,每次的比较次数为arr.length-1次,依次递减
let len = arr.length;
for(let k = 0; k < len - 1; k++) {
    for(let m = 0; m < len - k - 1; m++) {
        if(arr[m] > arr[m+1]){
            let val = arr[m];
            arr[m] = arr[m+1];
            arr[m+1] = val;
        }
    }
}
 
console.log(arr)

选择排序:在数组里面先定义一个最小值放在数组第一个位置上面,然后依次和它后面的数组进行比较,把最小的放在第一位,然后换到第二位,第二小开始与后面的元素比较,把后面当中的最小换到第二位上,然后依次循环,直到排到倒数第二位。

代码实现:

var a=[1,23,5,9,11,66,27];
let len = arr.length;
for(let k = 0; k < len - 1; k++) {
    for(let m = k + 1; m < len; m++) {
        if(arr[k] > arr[m]){
            let val = arr[m];
            arr[m] = arr[k];
            arr[k] = val;
        }
    }
}
 
console.log(arr)

快速排序:从数列中挑出一个元素,称为 “基准”(pivot),重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作,递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。


public class QuickSort {
    public static void quickSort(int[] arr,int low,int high){
        int i,j,temp,t;
        if(low>high){
            return;
        }
        i=low;
        j=high;
        //temp就是基准位
        temp = arr[low];
 
        while (i<j) {
            //先看右边,依次往左递减
            while (temp<=arr[j]&&i<j) {
                j--;
            }
            //再看左边,依次往右递增
            while (temp>=arr[i]&&i<j) {
                i++;
            }
            //如果满足条件则交换
            if (i<j) {
                t = arr[j];
                arr[j] = arr[i];
                arr[i] = t;
            }
 
        }
        //最后将基准为与i和j相等位置的数字交换
         arr[low] = arr[i];
         arr[i] = temp;
        //递归调用左半数组
        quickSort(arr, low, j-1);
        //递归调用右半数组
        quickSort(arr, j+1, high);
    }


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值