2022 年,把 Python 学得跟 Java 一样熟练——05 插入排序

Posted 毕小宝

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2022 年,把 Python 学得跟 Java 一样熟练——05 插入排序相关的知识,希望对你有一定的参考价值。

背景

翻到以前实现的一个 Java 插入排序算法,今天把它翻译成 Python ,练习并温故 Python 的基础语法:

  1. for in range 循环下标范围,从 0 开始,到 N-1 ,倒序遍历用 reversed
  2. 插入排序算法,找到当前元素应该插入的位置。

回忆 Java 的实现

Java 实现插入排序算法:

public class InsertSortUtil 
    public static void insertSort(int[] array) 
        // 插入排序:i从第二个元素开始,将它与a0..ai-1 这些元素比较,找到它应该插入的位置 position
        for (int i = 1; i < array.length; i++) 
            // 记录当前 i 的元素到临时变量
            int currentValue = array[i];

            // 当前记录所在的位置为 i
            int position = i;

            // 向前对比,找到当前元素确定的有序的位置
            for (int j = i - 1; j >= 0; j--) 
                // 如果某个位置的元素比当前元素大,那就将这个数据向后挪动,修正位置
                if (array[j] > currentValue) 
                    array[j + 1] = array[j];
                    position = j;
                 else 
                    break;
                
            

            // 将目标位置插入当前元素
            array[position] = currentValue;
        
    

    public static void main(String[] args) 
        int[] r = new int[20];
        for (int i = 0; i < r.length; i++) 
            r[i] = (int) (Math.random() * 20000);
        

        System.out.println("before sort:"+Arrays.toString(r));
        insertSort(r);
        System.out.println("after sort:"+Arrays.toString(r));
    

Python 实现插入排序

def insertSort(array):
	for i in range(1,len(array)):
		# 记录临时变量
		currentValue = array[i]
		position = i
		
		for j in reversed(range(i)):
			# 如果当前 j 位置的数值比当前值大,将其往后移动,修正当前记录的位置
			if (array[j] > currentValue):
				array[j+1] = array[j]
				position = j
			else:
				break
		
		# 插入当前元素
		array[position] = currentValue

# 测试
datas = [1,2,0,3,4,6,7,9]
print('before sort',datas)		
insertSort(datas)
print('after sort',datas)

插入排序的核心思想是将当前元素 a[i] 插入到前面 a[0..i-1] 中某个合适的位置,内层遍历是逆序范围为【i-1,0】,使用 reversed 函数来翻转数组。

运行结果:

启示录

消除模糊,今天弄透了两个 Python 知识点:

  1. 字符串的分片语法【start:end:step】,含头不含尾,这点跟 Java 语法一样。
  2. range(n) 得到的数组范围为 【0,n-1】,reversed 可以翻转数组。

以上是关于2022 年,把 Python 学得跟 Java 一样熟练——05 插入排序的主要内容,如果未能解决你的问题,请参考以下文章

2022 年,把 Python 学得跟 Java 一样熟练——05 插入排序

2022 年,把 Python 学得跟 Java 一样熟练——02 类定义

2022 年,把 Python 学得跟 Java 一样熟练——04 matplotlib 绘制概率图

2022 年,把 Python 学得跟 Java 一样熟练——06 获取 u817eu8bafu0020 Cosmic

2022 年,把 Python 学得跟 Java 一样熟练——06 获取 u817eu8bafu0020 Cosmic

2022 年,把 Python 学得跟 Java 一样熟练——06 获取 u817eu8bafu0020 Cosmic