Rumah Operasi dan penyelenggaraan operasi dan penyelenggaraan linux 排序算法:插入排序与shell排序

排序算法:插入排序与shell排序

May 04, 2020 am 10:17 AM
1

今天讲两种经典的排序所发,插入排序和shell排序。你可以把shell排序理解为插入排序的升级版。

插入排序

插入排序(Insertion-Sort)的算法描述是一种非常简单直观的排序算法。它的复杂度和冒泡排序差不多。工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

从网上找了一个动图如下:

849589-20171015225645277-1151100000.gif

流程如下:

  • 从第一个元素开始,该元素可以认为已经被排序;

  • 取出下一个元素,在已经排序的元素序列中从后向前扫描;

  • 如果该元素(已排序)大于新元素,将该元素移到下一位置;

  • 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;

  • 将新元素插入到该位置后;

  • 重复步骤2~5。

代码实现(这里使用的是C语言):

void insort (int arr[], int len)
{
    int i,current,preindex;
    for (i = 1; i < len; i++) {
        preindex = i - 1;
        current = arr[i];
        while (preindex >= 0 && current < arr[preindex]) {
            arr[preindex + 1] = arr[preindex];
            preindex --;
        }
        arr[preindex + 1] = current;
    }
}
Salin selepas log masuk

shell排序

在理解了插入排序后,就很容易理解shell排序。

Shell排序算法是D.L.Shell于1959年发明的,其基本思想是:先比较距离远的元素,这样可以快速减少大量的无序情况,从而减轻后续的工作。被比较的元素之间的距离逐步减少,直到减少为1,这时排序就变成了相邻元素的交换。

希尔排序是把记录按下表的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。

过程演示(该图也是从网上找的):

aHR0cHM6Ly9pbWFnZXMyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTE5MjY5OS8yMDE4MDMvMTE5MjY5OS0yMDE4MDMxOTA5NDExNjA0MC0xNjM4NzY2MjcxLnBuZw.jpg

代码实现(这里使用的是C语言):

void shell_sort (int arr[], int len)
{
    int gap,i,current,preindex;
    for (gap = len / 2; gap > 0; gap /= 2) {
        for (i = gap; i < len; i++) {
            preindex = i - gap;
            current = arr[i];
            while (preindex >= 0 && current < arr[preindex]) {
                arr[preindex + gap] = arr[preindex];
                preindex -= gap;
            }
            arr[preindex + gap] = current;
        }
    }
}
Salin selepas log masuk

Atas ialah kandungan terperinci 排序算法:插入排序与shell排序. 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

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

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)

Di mana untuk melihat balak tigervnc di debian Di mana untuk melihat balak tigervnc di debian Apr 13, 2025 am 07:24 AM

Dalam sistem Debian, fail log pelayan Tigervnc biasanya disimpan dalam folder .vnc di direktori rumah pengguna. Jika anda menjalankan tigervnc sebagai pengguna tertentu, nama fail log biasanya sama dengan xf: 1.log, di mana xf: 1 mewakili nama pengguna. Untuk melihat log ini, anda boleh menggunakan arahan berikut: Cat ~/.vnc/xf: 1.log atau, anda boleh membuka fail log menggunakan editor teks: Nano ~/.vnc/xf: 1.log Sila ambil perhatian bahawa mengakses dan melihat fail log mungkin memerlukan kebenaran root, bergantung pada tetapan keselamatan sistem.

Operasi Linux Utama: Panduan Pemula Operasi Linux Utama: Panduan Pemula Apr 09, 2025 pm 04:09 PM

Pemula Linux harus menguasai operasi asas seperti pengurusan fail, pengurusan pengguna dan konfigurasi rangkaian. 1) Pengurusan Fail: Gunakan arahan MKDIR, Touch, LS, RM, MV, dan CP. 2) Pengurusan Pengguna: Gunakan perintah USERADD, PASSWD, USERDEL, dan USERMOD. 3) Konfigurasi Rangkaian: Gunakan perintah IFConfig, Echo, dan UFW. Operasi ini adalah asas pengurusan sistem Linux, dan menguasai mereka dengan berkesan dapat menguruskan sistem.

Bagaimana Debian Readdir Bersepadu Dengan Alat Lain Bagaimana Debian Readdir Bersepadu Dengan Alat Lain Apr 13, 2025 am 09:42 AM

Fungsi Readdir dalam sistem Debian adalah panggilan sistem yang digunakan untuk membaca kandungan direktori dan sering digunakan dalam pengaturcaraan C. Artikel ini akan menerangkan cara mengintegrasikan Readdir dengan alat lain untuk meningkatkan fungsinya. Kaedah 1: Menggabungkan Program Bahasa C dan Pipeline Pertama, tulis program C untuk memanggil fungsi Readdir dan output hasilnya:#termasuk#termasuk#includeintMain (intargc, char*argv []) {dir*dir; structdirent*entry; if (argc! = 2) {

Cara Mentafsirkan Hasil Output Debian Sniffer Cara Mentafsirkan Hasil Output Debian Sniffer Apr 12, 2025 pm 11:00 PM

DebiansNiffer adalah alat sniffer rangkaian yang digunakan untuk menangkap dan menganalisis cap waktu paket rangkaian: Memaparkan masa untuk penangkapan paket, biasanya dalam beberapa saat. Alamat IP Sumber (SourceIP): Alamat rangkaian peranti yang menghantar paket. Alamat IP Destinasi (DestinationIP): Alamat rangkaian peranti yang menerima paket data. Sourceport: Nombor port yang digunakan oleh peranti yang menghantar paket. Destinatio

Panduan Persediaan DNS Pelayan Mel Debian Panduan Persediaan DNS Pelayan Mel Debian Apr 13, 2025 am 11:33 AM

Untuk mengkonfigurasi tetapan DNS untuk pelayan mel Debian, anda boleh mengikuti langkah -langkah ini: Buka fail konfigurasi rangkaian: Gunakan editor teks (seperti VI atau Nano) untuk membuka fail konfigurasi rangkaian/etc/rangkaian/antara muka. Sudonano/etc/rangkaian/antara muka Cari Konfigurasi Antara Muka Rangkaian: Cari antara muka rangkaian yang akan diubah suai dalam fail konfigurasi. Biasanya, konfigurasi antara muka Ethernet terletak di blok IFETH0.

Bagaimana Debian Meningkatkan Kelajuan Pemprosesan Data Hadoop Bagaimana Debian Meningkatkan Kelajuan Pemprosesan Data Hadoop Apr 13, 2025 am 11:54 AM

Artikel ini membincangkan cara meningkatkan kecekapan pemprosesan data Hadoop pada sistem Debian. Strategi pengoptimuman meliputi peningkatan perkakasan, pelarasan parameter sistem operasi, pengubahsuaian konfigurasi Hadoop, dan penggunaan algoritma dan alat yang cekap. 1. Pengukuhan sumber perkakasan memastikan bahawa semua nod mempunyai konfigurasi perkakasan yang konsisten, terutama memberi perhatian kepada prestasi CPU, memori dan peralatan rangkaian. Memilih komponen perkakasan berprestasi tinggi adalah penting untuk meningkatkan kelajuan pemprosesan keseluruhan. 2. Sistem operasi Tunes deskriptor fail dan sambungan rangkaian: Ubah suai fail /etc/security/limits.conf untuk meningkatkan had atas deskriptor fail dan sambungan rangkaian yang dibenarkan dibuka pada masa yang sama oleh sistem. Pelarasan Parameter JVM: Laraskan fail Hadoop-env.sh

Cara mengitar semula pakej yang tidak lagi digunakan Cara mengitar semula pakej yang tidak lagi digunakan Apr 13, 2025 am 08:51 AM

Artikel ini menerangkan cara membersihkan pakej perisian yang tidak berguna dan membebaskan ruang cakera dalam sistem Debian. Langkah 1: Kemas kini senarai pakej Pastikan senarai pakej anda terkini: Sudoaptupdate Langkah 2: Lihat pakej yang dipasang Gunakan arahan berikut untuk melihat semua pakej yang dipasang: DPKG-Get-Selections | GREP-VDEINSTALL Langkah 3: Kenal pasti pakej berlebihan Gunakan alat kebolehan untuk mencari pakej yang tidak lagi diperlukan. Aptitude akan memberikan cadangan untuk membantu anda memadam pakej dengan selamat: sudoaptitudesearch '~ pimportant' Perintah ini menyenaraikan tag

Cara Menggunakan Log Debian Apache Untuk Meningkatkan Prestasi Laman Web Cara Menggunakan Log Debian Apache Untuk Meningkatkan Prestasi Laman Web Apr 12, 2025 pm 11:36 PM

Artikel ini akan menerangkan bagaimana untuk meningkatkan prestasi laman web dengan menganalisis log Apache di bawah sistem Debian. 1. Asas Analisis Log Apache Log merekodkan maklumat terperinci semua permintaan HTTP, termasuk alamat IP, timestamp, url permintaan, kaedah HTTP dan kod tindak balas. Dalam sistem Debian, log ini biasanya terletak di direktori/var/log/apache2/access.log dan /var/log/apache2/error.log. Memahami struktur log adalah langkah pertama dalam analisis yang berkesan. 2. Alat Analisis Log Anda boleh menggunakan pelbagai alat untuk menganalisis log Apache: Alat baris arahan: grep, awk, sed dan alat baris arahan lain.

See all articles