希望你能理解的快速排序 --- 用12张图 细节图解快速排序 !!

首先说一下快排的基本概念,从一个数组里面选一个基础值,然后将数组里所有大于这个基础值的数放到右边小于这个基础值的放到左边

结合着以下观念看下方12张图,理解具体如何实现(可以先看图)

  1. 将数组的第一个值8,拿出来,作为基础值,并存储到变量number中,让arr[0]空出来以供插入。
  2. 从右往左开始比,是因为左边arr[0]空了出来,右边要是有比number(也就是8)大的数字,就可以直接移动到arr[0] (如图3,图4)。
  3. 下标移动只有在: (如图5, 图6)
    a. 下标比number
    b. 下标比number
  4. 否则,不进行移动,如 : (如图3,4 和 图7,8)
    a. 右下标比numbe小,则将右下标所指的值,给到左下标指的值,此时,右下标空出,不可移动,供左下标出现大于number时移动。
    b. 左下标比number大,则将左下标所致的值,给到右下标的值,此时,左下标空出,不可移动,供右下标出现小于number时移动。
  5. 当左右下标相等时,此时由前面四点得,左右下标所指的值,应该是空出的,将number放入,就形成了左边都比number小,右边都比number大; (如图11,,12);

图1--------------------------------------------------------------

在这里插入图片描述

图2--------------------------------------------------------------

在这里插入图片描述

图3--------------------------------------------------------------

在这里插入图片描述

图4--------------------------------------------------------------

在这里插入图片描述

图5--------------------------------------------------------------

在这里插入图片描述

图6--------------------------------------------------------------

在这里插入图片描述

图7--------------------------------------------------------------

在这里插入图片描述

图8--------------------------------------------------------------

在这里插入图片描述

图9--------------------------------------------------------------

在这里插入图片描述

图10--------------------------------------------------------------

在这里插入图片描述

图11--------------------------------------------------------------

在这里插入图片描述

图12--------------------------------------------------------------

在这里插入图片描述

function quicksort(arr: number[]): number[] {
    if (arr.length === 0 || arr.length === 1) {
        return arr;
    }
    if (arr.length === 2) {
        arr[0] > arr[1] && ([arr[0], arr[1]] = [arr[1], arr[0]]);
        return arr;
    }
    let number = arr[0];
    let change = 0;
    let left = 0;
    let right = arr.length - 1;
    let s = 0;
    while (left < right) {
        while (s === 0) {
            if (arr[right] < number && left < right) {
                arr[change] = arr[right];
                change = right;
                s = 1;
                break;
            }
            if (left === right) {
                arr[change] = number;
                break;
            }
            right--;
        }
        while (s === 1) {
            if (arr[left] > number && left < right) {
                arr[change] = arr[left];
                change = left;
                s = 0;
                break;
            }
            if (left === right) {
                arr[change] = number;
                break;
            }
            left++;
        }
    }
    return [
        ...quicksort(arr.slice(0, change)),
        number,
        ...quicksort(arr.slice(change + 1)),
    ];
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现在echarts中用el-radio-button按钮切换不同的数据,可以先在vue中定义一个变量来存储当前选中的数据源,例如: ``` <template> <div> <el-radio-group v-model="selectedSource"> <el-radio-button :label="source1">数据源1</el-radio-button> <el-radio-button :label="source2">数据源2</el-radio-button> <el-radio-button :label="source3">数据源3</el-radio-button> </el-radio-group> <div id="chart"></div> </div> </template> <script> export default { data() { return { selectedSource: 'source1', // 默认选中数据源1 source1: [], // 数据源1 source2: [], // 数据源2 source3: [], // 数据源3 } }, methods: { fetchData() { // 使用fetch获取数据,并将返回的数据赋值给对应的数据源 fetch('/api/data1').then(response => response.json()).then(data => this.source1 = data) fetch('/api/data2').then(response => response.json()).then(data => this.source2 = data) fetch('/api/data3').then(response => response.json()).then(data => this.source3 = data) }, renderChart() { // 根据当前选中的数据源渲染图表 const data = this[this.selectedSource] // 使用echarts绘制图表 const chart = echarts.init(document.getElementById('chart')) chart.setOption({ // 配置图表选项 series: [ { type: 'bar', data, }, ], }) }, }, mounted() { this.fetchData() // 获取数据 this.renderChart() // 渲染图表 }, watch: { selectedSource() { this.renderChart() // 监听选中的数据源变化,重新渲染图表 }, }, } </script> ``` 在上面的代码中,我们定义了一个selectedSource变量来存储当前选中的数据源,然后在模板中使用el-radio-button按钮来选择不同的数据源。在mounted钩子函数中,我们调用fetchData方法来获取数据,在renderChart方法中根据当前选中的数据源渲染图表。同时,我们使用watch监听selectedSource变量的变化,一旦变化就重新渲染图表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值