Rumah pembangunan bahagian belakang Tutorial Python Sepuluh algoritma pengisihan teratas yang mesti dikuasai oleh pengaturcara (Bahagian 1)

Sepuluh algoritma pengisihan teratas yang mesti dikuasai oleh pengaturcara (Bahagian 1)

Aug 15, 2023 pm 02:55 PM
algoritma pengisihan



Pengenalan kepada isu ini

algoritma pengisihan Boleh dikatakan setiap pengaturcara mesti menguasainya Perlu memahami prinsip dan pelaksanaannya Berikut adalah pengenalan kepada pelaksanaan ular sawa bagi sepuluh algoritma pengisihan yang biasa digunakan untuk memudahkan pembelajaran anda.


01 Isih Buih - Isih Pertukaran 02 Isih Pantas - Isih Pertukaran
Pilih

Isih 04 Isih timbunan - isihan pilihan

05 Isih sisipan - isihan sisipan

06 Isih sisipan

🎜08 Isih mengira - isihan pengedaran 🎜🎜

09 Isih Radix - isihan pengedaran

10 Isih baldi - isihan pengedaran



01
Isih Gelembung
Isih Buih: Algoritma pengisihan klasik:
secara beransur-ansur muncul seperti buih di dasar air, oleh itu namanya. . Jika yang pertama lebih besar daripada yang kedua, tukar kedua-duanya.

Lakukan perkara yang sama untuk setiap pasangan elemen bersebelahan, bermula dengan pasangan pertama di awal dan berakhir dengan pasangan terakhir di penghujung. Pada ketika ini, elemen terakhir hendaklah nombor terbesar.
Ulang langkah di atas untuk semua elemen kecuali yang terakhir.
    Teruskan mengulangi langkah di atas untuk semakin sedikit elemen setiap kali sehingga tiada pasangan nombor untuk dibandingkan.

Kod adalah seperti berikut:
'''冒泡排序'''
def Bubble_Sort(arr):
    for i in range(1, len(arr)):
        for j in range(0, len(arr)-i):
            if arr[j] > arr[j+1]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
    return arr

arr = [29, 63, 41, 5, 62, 66, 57, 34, 94, 22]
result = Bubble_Sort(arr)
print('result list: ', result)
# result list: [5, 22, 29, 34, 41, 57, 62, 63, 66, 94]
Salin selepas log masuk

02
Cepat Isih
Isih Pantas:
Keseluruhan proses pengisihan boleh dilakukan secara rekursif, supaya keseluruhan data menjadi urutan tertib, yang merupakan penambahbaikan pada algoritma pengisihan gelembung.

Algoritma Prinsip:
First menetapkan nilai pemisah, dan bahagikan array ke bahagian kiri dan kanan melalui nilai pemisah ini.
  • Tumpukan data yang lebih besar daripada atau sama dengan nilai cutoff ke sebelah kanan tatasusunan dan data lebih kecil daripada nilai cutoff ke sebelah kiri tatasusunan. Pada masa ini, setiap elemen di bahagian kiri adalah kurang daripada atau sama dengan nilai pembahagian, dan setiap elemen di bahagian kanan lebih besar daripada atau sama dengan nilai pembahagian.

  • Kemudian, data di kiri dan kanan boleh diisih secara bebas. Untuk data tatasusunan di sebelah kiri, anda boleh mengambil nilai pembahagian dan membahagikan bahagian data ini kepada bahagian kiri dan kanan Begitu juga, letakkan nilai yang lebih kecil di sebelah kiri dan nilai yang lebih besar di sebelah kanan. Data tatasusunan di sebelah kanan juga boleh diproses dengan cara yang sama.

  • Ulang proses di atas sehingga data di bahagian kiri dan kanan disusun. Kod adalah seperti berikut:


03
Isihan pilihan
: Ia adalah pengisihan yang Mudah dan intuitif algoritma.
Tidak kira apa data yang dimasukkan, kerumitan masa ialah O(n²). Jadi apabila menggunakannya, lebih kecil saiz data, lebih baik.

Prinsip algoritma:
unsur yang paling kecil
simpannya pada kedudukan permulaan urutan yang disusun. .
  • Dan seterusnya sehingga semua elemen disusun.

代码如下:
'''选择排序'''
def Selection_Sort(arr):
    for i in range(len(arr) - 1):
        # 记录最小数的索引
        minIndex = i
        for j in range(i + 1, len(arr)):
            if arr[j] < arr[minIndex]:
                minIndex = j
        # i 不是最小数时,将 i 和最小数进行交换
        if i != minIndex:
            arr[i], arr[minIndex] = arr[minIndex], arr[i]
    return arr

arr = [5, 10, 76, 55, 13, 79, 49, 51, 65, 30]
result = Quick_Sort(arr)
print(&#39;result list: &#39;, result)
# result list: [5, 10, 13, 30, 49, 51, 55, 65, 76, 79]
Salin selepas log masuk

04
插入排序
插入排序(Insertion Sort)一般也被称为直接插入排序,是一种最简单直观的排序算法

算法原理:
  • 将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。

  • 从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。


代码如下:
&#39;&#39;&#39;插入排序&#39;&#39;&#39;
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 = [31, 80, 42, 47, 35, 26, 10, 5, 51, 53]
result = Insertion_Sort(arr)
print(&#39;result list: &#39;, result)
# result list: [5, 10, 26, 31, 35, 42, 47, 51, 53, 80]
Salin selepas log masuk

05
堆排序
堆排序(Heap sort):是指利用堆这种数据结构所设计的一种排序算法,堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排序。

算法原理:
  • 创建一个堆 H[0……n-1];

  • 把堆首(最大值)和堆尾互换;

  • 把堆的尺寸缩小 1,并调用 shift_down(0),目的是把新的数组顶端数据调整到相应位置;

  • 重复步骤 2,直到堆的尺寸为 1。


代码如下:
&#39;&#39;&#39;堆排序&#39;&#39;&#39;
def Heapify(arr, n, i):
    largest = i
    # 左右节点分块
    left = 2 * i + 1
    right = 2 * i + 2
    if left < n and arr[i] < arr[left]:
        largest = left
    if right < n and arr[largest] < arr[right]:
        largest = right
    if largest != i:
        # 大小值交换
        arr[i], arr[largest] = arr[largest], arr[i]
        # 递归
        Heapify(arr, n, largest)

def Heap_Sort(arr):
    nlen = len(arr)
    for i in range(nlen, -1, -1):
        # 调整节点
        Heapify(arr, nlen, i)
    for i in range(nlen - 1, 0, -1):
        arr[i], arr[0] = arr[0], arr[i]
        # 调整节点
        Heapify(arr, i, 0)
    return arr

arr = [26, 53, 83, 86, 5, 46, 72, 21, 4, 75]
result = Heap_Sort(arr)
print(&#39;result list: &#39;, result)
# result list: [4, 5, 21, 26, 46, 53, 72, 75, 83, 86]
Salin selepas log masuk

Atas ialah kandungan terperinci Sepuluh algoritma pengisihan teratas yang mesti dikuasai oleh pengaturcara (Bahagian 1). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Isu reka bentuk eksperimen yang kompleks dalam pasaran dua belah Kuaishou Isu reka bentuk eksperimen yang kompleks dalam pasaran dua belah Kuaishou Apr 15, 2023 pm 07:40 PM

1. Latar belakang masalah 1. Pengenalan kepada eksperimen pasaran dua belah Pasaran dua belah, iaitu platform, merangkumi dua peserta, pengeluar dan pengguna, dan kedua-dua pihak mempromosikan satu sama lain. Sebagai contoh, Kuaishou mempunyai pengeluar video dan pengguna video, dan kedua-dua identiti mungkin bertindih pada tahap tertentu. Eksperimen dua hala ialah kaedah eksperimen yang menggabungkan kumpulan di pihak pengeluar dan pengguna. Percubaan dua hala mempunyai kelebihan berikut: (1) Kesan strategi baharu pada dua aspek boleh dikesan serentak, seperti perubahan dalam DAU produk dan bilangan orang yang memuat naik karya. Platform dua hala selalunya mempunyai kesan rangkaian rentas sisi Semakin ramai pembaca, semakin aktif pengarang, dan semakin aktif pengarang, semakin ramai pembaca yang akan mengikuti. (2) Limpahan kesan dan pemindahan boleh dikesan. (3) Bantu kami lebih memahami mekanisme tindakan Percubaan AB itu sendiri tidak boleh memberitahu kami hubungan antara sebab dan akibat, sahaja

Google menggunakan AI untuk memecahkan meterai sepuluh tahun algoritma pengisihan Ia dilaksanakan bertrilion kali setiap hari, tetapi netizen mengatakan ia adalah penyelidikan yang paling tidak realistik? Google menggunakan AI untuk memecahkan meterai sepuluh tahun algoritma pengisihan Ia dilaksanakan bertrilion kali setiap hari, tetapi netizen mengatakan ia adalah penyelidikan yang paling tidak realistik? Jun 22, 2023 pm 09:18 PM

Menganjurkan |. Nuka-Cola, Chu Xingjuan Rakan-rakan yang telah mengikuti kursus asas sains komputer mestilah secara peribadi mereka bentuk algoritma pengisihan - iaitu, menggunakan kod untuk menyusun semula item dalam senarai tidak tertib dalam susunan menaik atau menurun. Ia adalah satu cabaran yang menarik, dan terdapat banyak cara yang mungkin untuk melakukannya. Banyak masa telah dilaburkan untuk memikirkan cara untuk menyelesaikan tugasan pengasingan dengan lebih cekap. Sebagai operasi asas, algoritma pengisihan dibina ke dalam perpustakaan standard kebanyakan bahasa pengaturcaraan. Terdapat banyak teknik dan algoritma pengisihan yang berbeza digunakan dalam pangkalan kod di seluruh dunia untuk menyusun sejumlah besar data dalam talian, tetapi sekurang-kurangnya setakat perpustakaan C++ yang digunakan dengan pengkompil LLVM, kod pengisihan tidak berubah dalam lebih daripada satu dekad. Baru-baru ini, pasukan Google DeepMindAI kini telah membangunkan a

Cara menapis dan mengisih data dalam pembangunan teknologi Vue Cara menapis dan mengisih data dalam pembangunan teknologi Vue Oct 09, 2023 pm 01:25 PM

Cara menapis dan mengisih data dalam pembangunan teknologi Vue Dalam pembangunan teknologi Vue, penapisan dan pengisihan data adalah fungsi yang sangat biasa dan penting. Melalui penapisan dan pengisihan data, kami boleh membuat pertanyaan dan memaparkan maklumat yang kami perlukan dengan cepat, meningkatkan pengalaman pengguna. Artikel ini akan memperkenalkan cara menapis dan mengisih data dalam Vue, dan menyediakan contoh kod khusus untuk membantu pembaca memahami dan menggunakan fungsi ini dengan lebih baik. 1. Penapisan data Penapisan data merujuk kepada penapisan data yang memenuhi keperluan berdasarkan syarat tertentu. Dalam Vue, kita boleh lulus comp

Bagaimana untuk melaksanakan algoritma isihan pemilihan dalam C# Bagaimana untuk melaksanakan algoritma isihan pemilihan dalam C# Sep 20, 2023 pm 01:33 PM

Cara melaksanakan algoritma isihan pemilihan dalam Isih Pemilihan (SelectionSort) ialah algoritma pengisihan yang mudah dan intuitif. Idea asasnya ialah memilih elemen terkecil (atau terbesar) daripada unsur-unsur yang akan diisih setiap kali dan meletakkannya pada penghujung. urutan yang disusun. Ulangi proses ini sehingga semua elemen diisih. Mari ketahui lebih lanjut tentang cara melaksanakan algoritma isihan pemilihan dalam C#, bersama-sama dengan contoh kod tertentu. Mencipta kaedah isihan pemilihan Pertama, kita perlu mencipta kaedah untuk melaksanakan isihan pemilihan. Kaedah ini menerima a

Swoole Advanced: Cara menggunakan multi-threading untuk melaksanakan algoritma pengisihan berkelajuan tinggi Swoole Advanced: Cara menggunakan multi-threading untuk melaksanakan algoritma pengisihan berkelajuan tinggi Jun 14, 2023 pm 09:16 PM

Swoole ialah rangka kerja komunikasi rangkaian berprestasi tinggi berdasarkan bahasa PHP Ia menyokong pelaksanaan berbilang mod IO tak segerak dan berbilang protokol rangkaian lanjutan. Berdasarkan Swoole, kita boleh menggunakan fungsi berbilang benang untuk melaksanakan operasi algoritma yang cekap, seperti algoritma pengisihan berkelajuan tinggi. Algoritma pengisihan berkelajuan tinggi (QuickSort) ialah algoritma pengisihan biasa Dengan mencari elemen penanda aras, elemen tersebut dibahagikan kepada dua urutan yang lebih kecil daripada elemen penanda aras diletakkan di sebelah kiri, dan yang lebih besar daripada atau sama dengan penanda aras elemen diletakkan di sebelah kanan Kemudian susulan kiri dan kanan diletakkan ulangan susulan

Apakah algoritma pengisihan untuk tatasusunan? Apakah algoritma pengisihan untuk tatasusunan? Jun 02, 2024 pm 10:33 PM

Algoritma pengisihan tatasusunan digunakan untuk menyusun elemen dalam susunan tertentu. Jenis algoritma biasa termasuk: Isih gelembung: menukar kedudukan dengan membandingkan elemen bersebelahan. Isih pilihan: Cari elemen terkecil dan tukarkannya ke kedudukan semasa. Isih sisipan: Sisipkan elemen satu demi satu ke kedudukan yang betul. Isih pantas: kaedah bahagi dan takluk, pilih elemen pangsi untuk membahagi tatasusunan. Isih Gabung: Bahagi dan Takluk, Isih Rekursif dan Gabungan Subarray.

Cara menggunakan algoritma isihan radix dalam C++ Cara menggunakan algoritma isihan radix dalam C++ Sep 19, 2023 pm 12:15 PM

Cara menggunakan algoritma isihan radix dalam C++ Algoritma isihan radix ialah algoritma isihan bukan perbandingan yang melengkapkan isihan dengan membahagikan elemen untuk diisih kepada set digit yang terhad. Dalam C++, kita boleh menggunakan algoritma isihan radix untuk mengisih set integer. Di bawah ini kita akan membincangkan secara terperinci cara melaksanakan algoritma isihan radix, dengan contoh kod tertentu. Idea algoritma Idea algoritma pengisihan radix adalah untuk membahagikan elemen untuk diisih ke dalam set bit digital yang terhad, dan kemudian mengisih elemen pada setiap bit secara bergilir-gilir. Pengisihan pada setiap bit selesai

Bagaimana untuk melaksanakan fungsi algoritma pengisihan mudah menggunakan MySQL dan Java Bagaimana untuk melaksanakan fungsi algoritma pengisihan mudah menggunakan MySQL dan Java Sep 20, 2023 am 09:45 AM

Cara menggunakan MySQL dan Java untuk melaksanakan fungsi algoritma pengisihan mudah Pengenalan: Dalam pembangunan perisian, algoritma pengisihan ialah salah satu fungsi yang paling asas dan biasa digunakan. Artikel ini akan memperkenalkan cara menggunakan MySQL dan Java untuk melaksanakan fungsi algoritma pengisihan mudah, dan menyediakan contoh kod khusus. 1. Gambaran keseluruhan algoritma pengisihan Algoritma pengisihan ialah algoritma yang menyusun set data mengikut peraturan tertentu Algoritma pengisihan yang biasa digunakan termasuk isihan gelembung, isihan sisipan, isihan pemilihan, isihan cepat, dsb. Artikel ini akan menggunakan pengisihan gelembung sebagai contoh untuk menerangkan dan melaksanakannya. 2. M

See all articles