欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中sorted()函數(shù)的強(qiáng)大排序技術(shù)實(shí)例探索

 更新時(shí)間:2024年01月10日 09:05:20   作者:濤哥聊Python  
排序在編程中是一個(gè)基本且重要的操作,而Python的sorted()函數(shù)則為我們提供了強(qiáng)大的排序能力,在本篇文章中,我們將深入研究不同排序算法、sorted()?函數(shù)的靈活性,以及各種排序場(chǎng)景下的最佳實(shí)踐

排序算法概述

冒泡排序

冒泡排序是一種簡(jiǎn)單的排序算法,通過(guò)多次遍歷比較相鄰元素并交換來(lái)實(shí)現(xiàn)排序。以下是一個(gè)冒泡排序的例子:

# 冒泡排序示例代碼
def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        for j in range(0, n - i - 1):
            if arr[j] > arr[j + 1]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
    return arr

arr = [64, 34, 25, 12, 22, 11, 90]
sorted_arr = bubble_sort(arr)
print("冒泡排序結(jié)果:", sorted_arr)

插入排序

插入排序通過(guò)構(gòu)建有序序列,逐個(gè)將未排序的元素插入到已排序序列的適當(dāng)位置來(lái)排序。以下是一個(gè)插入排序的例子:

# 插入排序示例代碼
def insertion_sort(arr):
    for i in range(1, len(arr)):
        key = arr[i]
        j = i - 1
        while j >= 0 and key < arr[j]:
            arr[j + 1] = arr[j]
            j -= 1
        arr[j + 1] = key
    return arr

arr = [64, 34, 25, 12, 22, 11, 90]
sorted_arr = insertion_sort(arr)
print("插入排序結(jié)果:", sorted_arr)

選擇排序

選擇排序不斷地從未排序部分找到最小元素,并將其放到已排序部分的末尾。以下是一個(gè)選擇排序的例子:

# 選擇排序示例代碼
def selection_sort(arr):
    for i in range(len(arr)):
        min_idx = i
        for j in range(i + 1, len(arr)):
            if arr[j] < arr[min_idx]:
                min_idx = j
        arr[i], arr[min_idx] = arr[min_idx], arr[i]
    return arr

arr = [64, 34, 25, 12, 22, 11, 90]
sorted_arr = selection_sort(arr)
print("選擇排序結(jié)果:", sorted_arr)

快速排序

快速排序是一種高效的排序算法,采用分治的策略,通過(guò)選定基準(zhǔn)值將數(shù)組分割成較小和較大的兩個(gè)子數(shù)組。以下是一個(gè)快速排序的例子:

# 快速排序示例代碼
def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    else:
        pivot = arr[0]
        less_than_pivot = [x for x in arr[1:] if x <= pivot]
        greater_than_pivot = [x for x in arr[1:] if x > pivot]
        return quick_sort(less_than_pivot) + [pivot] + quick_sort(greater_than_pivot)

# 使用示例
arr = [64, 34, 25, 12, 22, 11, 90]
sorted_arr = quick_sort(arr)
print("快速排序結(jié)果:", sorted_arr)

在這個(gè)示例中,quick_sort() 函數(shù)遞歸地將數(shù)組分成小于基準(zhǔn)值和大于基準(zhǔn)值的兩個(gè)子數(shù)組,直至每個(gè)子數(shù)組的長(zhǎng)度小于等于1,即達(dá)到基本情形,然后將結(jié)果合并成一個(gè)有序數(shù)組。

歸并排序

歸并排序是一種分治算法,將原始列表分為較小的列表,直至每個(gè)列表只有一個(gè)元素,然后合并成一個(gè)有序列表。以下是一個(gè)歸并排序的例子:

# 歸并排序示例代碼
def merge_sort(arr):
    if len(arr) > 1:
        mid = len(arr) // 2
        left_half = arr[:mid]
        right_half = arr[mid:]

        merge_sort(left_half)
        merge_sort(right_half)

        i = j = k = 0

        while i < len(left_half) and j < len(right_half):
            if left_half[i] < right_half[j]:
                arr[k] = left_half[i]
                i += 1
            else:
                arr[k] = right_half[j]
                j += 1
            k += 1

        while i < len(left_half):
            arr[k] = left_half[i]
            i += 1
            k += 1

        while j < len(right_half):
            arr[k] = right_half[j]
            j += 1
            k += 1

# 使用示例
arr = [64, 34, 25, 12, 22, 11, 90]
merge_sort(arr)
print("歸并排序結(jié)果:", arr)

在這個(gè)示例中,merge_sort() 函數(shù)使用遞歸的方式將列表分解成較小的子列表,然后再將這些子列表合并成一個(gè)有序的列表。歸并排序的時(shí)間復(fù)雜度始終為 O(n log n),保持較穩(wěn)定。

sorted() 函數(shù)基礎(chǔ)

sorted() 函數(shù)是 Python 中的內(nèi)置函數(shù),用于排序列表、元組和字典。以下是 sorted() 函數(shù)的基本用法:

# `sorted()` 函數(shù)基本用法
arr = [64, 34, 25, 12, 22, 11, 90]
sorted_arr = sorted(arr)
print("基本排序結(jié)果:", sorted_arr)

多樣化的排序方法

穩(wěn)定性排序

穩(wěn)定性排序能夠保持相等元素之間的原始順序,尤其在多次排序時(shí)更為重要。下面是穩(wěn)定性排序的例子:

# 穩(wěn)定性排序示例代碼
employees = [
    {'name': 'Alice', 'age': 25},
    {'name': 'Bob', 'age': 30},
    {'name': 'Alice', 'age': 20},
    {'name': 'Charlie', 'age': 25}
]

sorted_employees = sorted(employees, key=lambda x: x['name'])
print("穩(wěn)定性排序結(jié)果:", sorted_employees)

逆序排序

sorted() 函數(shù)允許進(jìn)行逆序排序。下面是逆序排序的例子:

# 逆序排序示例代碼
arr = [64, 34, 25, 12, 22, 11, 90]
reverse_sorted_arr = sorted(arr, reverse=True)
print("逆序排序結(jié)果:", reverse_sorted_arr)

復(fù)雜對(duì)象的排序

sorted() 函數(shù)不僅可以用于數(shù)字,還可以對(duì)自定義對(duì)象進(jìn)行排序,通過(guò)使用類的特殊方法(例如 __lt____gt__)來(lái)實(shí)現(xiàn)。以下是自定義對(duì)象排序的例子:

# 對(duì)自定義對(duì)象排序示例代碼
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __repr__(self):
        return f"Person(name={self.name}, age={self.age})"

persons = [Person('Alice', 25), Person('Bob', 20), Person('Charlie', 30)]
sorted_persons = sorted(persons, key=lambda x: x.age)
print("自定義對(duì)象排序結(jié)果:", sorted_persons)

性能分析和最佳實(shí)踐

排序算法的選擇對(duì)于程序性能至關(guān)重要,我們將進(jìn)行排序算法的性能比較分析并提供最佳實(shí)踐建議。

排序算法性能比較

下面是不同排序算法的性能比較示例代碼:

# 排序算法性能比較示例代碼
import time

arr = list(range(10000, 0, -1))

start_time = time.time()
sorted_arr = sorted(arr)  # 使用內(nèi)置排序函數(shù)
end_time = time.time()
print(f"內(nèi)置排序函數(shù)運(yùn)行時(shí)間: {end_time - start_time}秒")

start_time = time.time()
bubble_sort(arr.copy())  # 使用冒泡排序
end_time = time.time()
print(f"冒泡排序運(yùn)行時(shí)間: {end_time - start_time}秒")

最佳實(shí)踐

絕對(duì),以下是一些關(guān)于排序和使用 sorted() 函數(shù)的最佳實(shí)踐:

利用關(guān)鍵字參數(shù) key 進(jìn)行靈活排序

利用 key 參數(shù)對(duì)復(fù)雜數(shù)據(jù)結(jié)構(gòu)進(jìn)行排序,比如排序字典的值、按照對(duì)象的某個(gè)屬性進(jìn)行排序等。

# 利用 key 參數(shù)對(duì)復(fù)雜數(shù)據(jù)結(jié)構(gòu)進(jìn)行排序示例
# 對(duì)字典的值進(jìn)行排序
dictionary = {'apple': 30, 'orange': 20, 'banana': 50, 'grapes': 10}
sorted_dict = sorted(dictionary, key=lambda x: dictionary[x])
print(sorted_dict)  # 輸出按值排序的鍵列表

避免修改原始數(shù)據(jù)

確保排序時(shí)不會(huì)對(duì)原始數(shù)據(jù)進(jìn)行修改,以免造成不可預(yù)料的影響。

# 避免修改原始數(shù)據(jù)示例
arr = [4, 3, 1, 2]
sorted_arr = sorted(arr)  # 創(chuàng)建一個(gè)新的已排序列表
print(sorted_arr)  # 輸出已排序列表
print(arr)  # 輸出原始列表,未被修改

選擇合適的排序算法

根據(jù)數(shù)據(jù)規(guī)模和類型選擇適當(dāng)?shù)呐判蛩惴?,以保證最佳性能。

# 選擇合適的排序算法示例
import random

# 對(duì)較小規(guī)模的數(shù)據(jù)使用選擇排序
small_data = random.sample(range(1, 50), 10)
print("Small data:", small_data)
sorted_small_data = sorted(small_data)  # 使用內(nèi)置排序
print("Sorted Small data:", sorted_small_data)

# 對(duì)較大規(guī)模的數(shù)據(jù)使用快速排序
large_data = random.sample(range(1, 100000), 10000)
print("Large data:", large_data[:10])  # 打印前10個(gè)數(shù)據(jù),避免太多輸出
sorted_large_data = sorted(large_data)  # 使用內(nèi)置排序
print("Sorted Large data:", sorted_large_data[:10])  # 打印前10個(gè)排序后的數(shù)據(jù),避免太多輸出

總結(jié)

排序算法在計(jì)算機(jī)科學(xué)和編程中扮演著至關(guān)重要的角色,sorted() 函數(shù)是 Python 中最為靈活和便捷的排序工具之一。本文介紹了幾種經(jīng)典的排序算法,例如冒泡排序、插入排序、選擇排序、快速排序和歸并排序。每個(gè)算法都有其獨(dú)特的優(yōu)勢(shì)和特點(diǎn),對(duì)不同類型的數(shù)據(jù)和場(chǎng)景有不同的適用性。

sorted() 函數(shù)在排序過(guò)程中提供了便利性和靈活性,能夠應(yīng)對(duì)各種數(shù)據(jù)類型的排序需求。此外,最佳實(shí)踐內(nèi)容包括了使用關(guān)鍵字參數(shù) key 進(jìn)行定制排序、避免對(duì)原始數(shù)據(jù)進(jìn)行修改、選擇適當(dāng)?shù)呐判蛩惴ㄒ约傲私鈺r(shí)間復(fù)雜度和空間復(fù)雜度等。這些最佳實(shí)踐能夠幫助開(kāi)發(fā)人員編寫(xiě)更加高效、清晰的代碼,并有效地處理排序需求。

排序算法的選擇需要根據(jù)具體情況,考慮數(shù)據(jù)規(guī)模、性能和算法穩(wěn)定性等方面的因素。了解各種算法的特點(diǎn)和適用場(chǎng)景,以及sorted() 函數(shù)的應(yīng)用方法,將有助于程序員在實(shí)際編碼中更好地應(yīng)對(duì)排序需求,提高代碼效率和性能。

以上就是Python中sorted()函數(shù)的強(qiáng)大排序技術(shù)實(shí)例探索的詳細(xì)內(nèi)容,更多關(guān)于Python排序sorted()函數(shù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 利用Pandas讀取表格行數(shù)據(jù)判斷是否相同的方法

    利用Pandas讀取表格行數(shù)據(jù)判斷是否相同的方法

    這篇文章主要給大家介紹了關(guān)于利用Pandas讀取表格行數(shù)據(jù)判斷是否相同的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Python中魔法參數(shù)?*args?和?**kwargs使用詳細(xì)講解

    Python中魔法參數(shù)?*args?和?**kwargs使用詳細(xì)講解

    這篇文章主要介紹了Python中魔法參數(shù)?*args?和?**kwargs使用的相關(guān)資料,*args和**kwargs是Python中實(shí)現(xiàn)函數(shù)參數(shù)可變性的重要工具,分別用于接受任意數(shù)量的位置參數(shù)和關(guān)鍵字參數(shù),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-12-12
  • python實(shí)現(xiàn)圖片轉(zhuǎn)字符畫(huà)

    python實(shí)現(xiàn)圖片轉(zhuǎn)字符畫(huà)

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)圖片轉(zhuǎn)字符畫(huà),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • 教你用Python寫(xiě)一個(gè)植物大戰(zhàn)僵尸小游戲

    教你用Python寫(xiě)一個(gè)植物大戰(zhàn)僵尸小游戲

    這篇文章主要介紹了教你用Python寫(xiě)一個(gè)植物大戰(zhàn)僵尸小游戲,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • python中threading超線程用法實(shí)例分析

    python中threading超線程用法實(shí)例分析

    這篇文章主要介紹了python中threading超線程用法,實(shí)例分析了Python中threading模塊的相關(guān)使用技巧,需要的朋友可以參考下
    2015-05-05
  • numpy.transpose()實(shí)現(xiàn)數(shù)組的轉(zhuǎn)置例子

    numpy.transpose()實(shí)現(xiàn)數(shù)組的轉(zhuǎn)置例子

    今天小編就為大家分享一篇numpy.transpose()實(shí)現(xiàn)數(shù)組的轉(zhuǎn)置例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • 對(duì)python numpy數(shù)組中冒號(hào)的使用方法詳解

    對(duì)python numpy數(shù)組中冒號(hào)的使用方法詳解

    下面小編就為大家分享一篇對(duì)python numpy數(shù)組中冒號(hào)的使用方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • Python中json.loads和json.dumps方法中英雙語(yǔ)詳解

    Python中json.loads和json.dumps方法中英雙語(yǔ)詳解

    在Python中json.loads和json.dumps是處理JSON數(shù)據(jù)的重要方法,json.loads用于將JSON字符串解析為Python對(duì)象,而json.dumps用于將Python對(duì)象序列化為JSON字符串,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-01-01
  • python基礎(chǔ)入門(mén)之列表(一)

    python基礎(chǔ)入門(mén)之列表(一)

    在Python中,列表(list)是常用的數(shù)據(jù)類型。列表由一系列按照特定順序排列的項(xiàng)(item)組成。
    2021-06-06
  • Python入門(mén)教程(二十)Python的Lambda表達(dá)式

    Python入門(mén)教程(二十)Python的Lambda表達(dá)式

    這篇文章主要介紹了Python入門(mén)教程(二十)Python的Lambda表達(dá)式,lambda表達(dá)式是一行的函數(shù)。它們?cè)谄渌Z(yǔ)言中也被稱為匿名函數(shù),lambda表達(dá)式非常有用,可以讓代碼簡(jiǎn)單,簡(jiǎn)潔,需要的朋友可以參考下
    2023-04-04

最新評(píng)論