cari

今天讲两种经典的排序所发,插入排序和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;
    }
}

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;
        }
    }
}

Atas ialah kandungan terperinci 排序算法:插入排序与shell排序. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
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
Mod Penyelenggaraan Linux: Memahami TujuannyaMod Penyelenggaraan Linux: Memahami TujuannyaApr 28, 2025 am 12:01 AM

Mod penyelenggaraan digunakan untuk penyelenggaraan sistem dan pembaikan, yang membolehkan pentadbir bekerja dalam persekitaran yang mudah. 1. Pembaikan Sistem: Pembaikan Sistem Fail Rasuah dan Loader Boot. 2. Reset Kata Laluan: Tetapkan semula kata laluan pengguna root. 3. Pengurusan Pakej: Pasang, Kemas kini atau Padam Pakej Perisian. Dengan mengubah suai konfigurasi grub atau memasuki mod penyelenggaraan dengan kunci tertentu, anda boleh keluar dengan selamat selepas melaksanakan tugas penyelenggaraan.

Operasi Linux: Konfigurasi Rangkaian dan RangkaianOperasi Linux: Konfigurasi Rangkaian dan RangkaianApr 27, 2025 am 12:09 AM

Konfigurasi rangkaian Linux boleh diselesaikan melalui langkah -langkah berikut: 1. Konfigurasi antara muka rangkaian, gunakan arahan IP untuk menetapkan atau mengedit tetapan ketekunan fail konfigurasi. 2. Sediakan IP statik, sesuai untuk peranti yang memerlukan IP tetap. 3. Menguruskan firewall dan gunakan alat -alat iptables atau firewalld untuk mengawal trafik rangkaian.

Mod Penyelenggaraan di Linux: Panduan Pentadbir SistemMod Penyelenggaraan di Linux: Panduan Pentadbir SistemApr 26, 2025 am 12:20 AM

Mod penyelenggaraan memainkan peranan utama dalam pengurusan sistem Linux, membantu membaiki, menaik taraf dan perubahan konfigurasi. 1. Masukkan mod penyelenggaraan. Anda boleh memilihnya melalui menu grub atau menggunakan arahan "SudosystemCtlisolaterscue.target". 2. Dalam mod penyelenggaraan, anda boleh melakukan pembaikan sistem fail dan operasi kemas kini sistem. 3. Penggunaan lanjutan termasuk tugas -tugas seperti menetapkan semula kata laluan root. 4. Kesilapan umum seperti tidak dapat memasukkan mod penyelenggaraan atau memasang sistem fail, boleh diperbaiki dengan memeriksa konfigurasi grub dan menggunakan arahan FSCK.

Mod penyelenggaraan di linux: kapan dan mengapa menggunakannyaMod penyelenggaraan di linux: kapan dan mengapa menggunakannyaApr 25, 2025 am 12:15 AM

Masa dan alasan untuk menggunakan mod penyelenggaraan Linux: 1) Apabila sistem bermula, 2) apabila melakukan kemas kini sistem utama atau peningkatan, 3) apabila melakukan penyelenggaraan sistem fail. Mod penyelenggaraan menyediakan persekitaran yang selamat dan terkawal, memastikan keselamatan dan kecekapan operasi, mengurangkan kesan kepada pengguna, dan meningkatkan keselamatan sistem.

Linux: Perintah dan operasi pentingLinux: Perintah dan operasi pentingApr 24, 2025 am 12:20 AM

Perintah yang tidak diperlukan di Linux termasuk: 1.LS: Kandungan Direktori Senarai; 2.CD: Tukar direktori kerja; 3.MKDIR: Buat direktori baru; 4.RM: Padam fail atau direktori; 5.CP: Salin fail atau direktori; 6.MV: Pindahkan atau menamakan semula fail atau direktori. Perintah ini membantu pengguna menguruskan fail dan sistem dengan cekap dengan berinteraksi dengan kernel.

Operasi Linux: Menguruskan Fail, Direktori, dan KebenaranOperasi Linux: Menguruskan Fail, Direktori, dan KebenaranApr 23, 2025 am 12:19 AM

Di Linux, pengurusan fail dan direktori menggunakan arahan LS, CD, MKDIR, RM, CP, MV, dan Pengurusan Kebenaran menggunakan arahan CHMOD, Chown, dan CHGRP. 1. Perintah pengurusan fail dan direktori seperti senarai terperinci LS-L, MKDIR-P membuat direktori secara rekursif. 2. Perintah Pengurusan Kebenaran seperti Kebenaran Fail Set Chmod755File, ChownUserFile mengubah pemilik fail, dan ChGRPGroupFile Change File Group. Perintah ini berdasarkan struktur sistem fail dan sistem pengguna dan kumpulan, dan mengendalikan dan mengawal melalui panggilan sistem dan metadata.

Apakah mod penyelenggaraan di Linux? DijelaskanApakah mod penyelenggaraan di Linux? DijelaskanApr 22, 2025 am 12:06 AM

Maintenancemodeinlinuxisaspecialbootenvironmentforcriticalsystemmaintenancetasks.itallowsadministratorstoperformTaskslikeresettingPasswords, RepairingFilesystems, andRecoveringFrombootfailureSinaminiMinalenvirenment.ToentermoDeDenance.ToentermodeShoode.ToentermodeShoode.ToentermodeShoode.ToentermoDeShoode.ToentermodeShoode.ToentermodeShoode.ToentermodeShoode.Toentermode

Linux: menyelam yang mendalam ke bahagian asasnyaLinux: menyelam yang mendalam ke bahagian asasnyaApr 21, 2025 am 12:03 AM

Komponen teras Linux termasuk kernel, sistem fail, shell, pengguna dan ruang kernel, pemandu peranti, dan pengoptimuman prestasi dan amalan terbaik. 1) Kernel adalah teras sistem, menguruskan perkakasan, memori dan proses. 2) Sistem fail menganjurkan data dan menyokong pelbagai jenis seperti Ext4, BTRFS dan XFS. 3) Shell adalah pusat arahan untuk pengguna untuk berinteraksi dengan sistem dan menyokong skrip. 4) Ruang pengguna berasingan dari ruang kernel untuk memastikan kestabilan sistem. 5) Pemandu peranti menghubungkan perkakasan ke sistem operasi. 6) Pengoptimuman prestasi termasuk konfigurasi sistem penalaan dan mengikuti amalan terbaik.

See all articles

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

PhpStorm versi Mac

PhpStorm versi Mac

Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

VSCode Windows 64-bit Muat Turun

VSCode Windows 64-bit Muat Turun

Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

MantisBT

MantisBT

Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual