剑指offer调整数组顺序

本文探讨了快速排序算法的Python实现,指出其不能保证元素的相对位置不变的问题。随后提出了一种能保持相对位置的排序算法,并给出了Python和Java的实现代码。该算法采用插入排序的思想,逐个处理数组元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

随手写了个快速排序思想的python代码,但是发现并不能保证相对位置一致

# -*- coding:utf-8 -*-
class Solution:
    def reOrderArray(array):
        # write code here
        left = 0
        right = len(array) - 1
        while (left < right):
            while (left < right) and (array[left]%2 == 1):
                left += 1
            array[left],array[right] = array[right],array[left]
            while (left < right) and (array[right]%2 == 0):
                right -= 1
            array[right],array[left] = array[left],array[right]
        #array[right] = array[left]
        return array

又想了想,保证相对位置一样,怕是要按顺序都数组,一个一个的处理元素:

# -*- coding:utf-8 -*-
class Solution:
    def reOrderArray(self, array):
        # write code here
        tmp=[]
        count = 0
        for i in array:
            if (i%2 == 0):
                tmp.append(i)
            else:
                tmp.insert(count,i)
                count += 1
        return tmp

用java实现好像不能这么写,找了个插入排序的思想的解法:

public class Solution {
    public void reOrderArray(int [] array) {
        int m = array.length;
        int k = 0;//排好序的奇数个数
        for (int i = 0; i < m; i++) {
            if (array[i] % 2 == 1) {
                int j = i;
                while (j > k) {//这段代码就是一直把第j个数和前一个数交换,直到它成为第k+1个数
                    int tmp = array[j];
                    array[j] = array[j-1];
                    array[j-1] = tmp;
                    j--;
                }
                k++;//排好序的数列加1
            }
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值