Sortarea datelor într-o interogare. Comanda SORT - sortează liniile dintr-un fișier text. Sortare în foldere

Încerc să înțeleg diferențele dintre Sortarea prin inserție și Sortarea selecției.

Ambele par să aibă două componente: o listă nesortată și o listă sortată. Ambii par să ia un element din lista nesortată și să îl pună în lista sortată la locul potrivit. Am văzut unele site-uri/cărți spunând că sortarea o face prin înlocuirea pe rând, în timp ce sortarea prin inserare găsește locul potrivit și o inserează. Cu toate acestea, am văzut alte articole spunând ceva care spune că sortarea prin inserare este, de asemenea, un schimb. Prin urmare, sunt confuz. Există vreo sursă canonică?

15 răspunsuri

Sortarea selecției:

Având o listă, luați elementul curent și schimbați-l cu cel mai mic element din partea dreaptă a elementului curent.

Inserare sortare:

Având o listă, luați elementul curent și introduceți-l în poziția corespunzătoare a listei, ajustând lista de fiecare dată când introduceți. Acest lucru este similar cu plasarea cărților într-un joc de cărți.

Complexitatea în timp a sortării selecției este întotdeauna n(n - 1)/2, în timp ce sortarea prin inserție are o complexitate mai dificilă, deoarece complexitatea sa în cel mai rău caz este n(n - 1)/2. De obicei, aceasta va fi mai mică sau egală cu comparația, apoi n(n - 1)/2.

Atât sortarea sortării, cât și selecția sortării au o buclă exterioară (peste fiecare index) și o buclă interioară (peste un subset de indici). Fiecare trecere a buclei interioare extinde regiunea sortată cu un element în detrimentul regiunii nesortate până când nu mai există elemente nesortate.

Diferența este ceea ce face bucla interioară:

    În sortarea, bucla interioară este peste elementele nesortate. Fiecare trecere selectează un element și îl mută în locația sa finală (la capătul curent al zonei sortate).

    În sortarea prin inserție, fiecare trecere a buclei interioare se repetă peste elementele sortate. Elementele sortate sunt deplasate până când bucla găsește locul potrivit pentru a insera următorul element nesortat.

Deci, o sortare sortează elementele sortate în ordinea de ieșire și rămâne pe loc după ce le-a căutat. În schimb, cu sortarea prin inserare, elementele nesortate rămân incluse până când sunt utilizate în ordinea de introducere, în timp ce elementele din regiunea sortată se vor deplasa.

În ceea ce privește schimbarea: selecția de sortare face o schimbare per trecere a buclei interioare. Sortarea prin inserție stochează de obicei elementul care urmează să fie inserat ca temperatură înainte de bucla interioară, lăsând loc buclei interioare pentru a compensa elementele sortate cu unul, apoi copiază temperatura în punctul de inserare după.

Poate că confuzia este că comparați descrierea sortării unei liste legate cu descrierea sortării unui tablou. Dar nu pot fi sigur deoarece nu ai menționat sursele tale.

Cea mai ușoară modalitate de a înțelege algoritmii de sortare este adesea să obțineți o descriere detaliată a algoritmului (nu lucruri vagi precum „acest sort folosește swap. Undeva nu spun unde”), obțineți cărți de joc (5-10 ar trebui să fie suficiente pentru simplu algoritmi de sortare) și rulați algoritmul manual.

Sortare prin sortare: scanați prin datele nesortate care caută cel mai mic element rămas, apoi schimbați-l în poziția imediat după datele sortate. Repetați până la sfârșit. Când sortați o listă, nu trebuie să modificați elementul minim pe poziție, în schimb puteți elimina nodul listă din vechea poziție și îl puteți introduce în cea nouă.

Inserarea unui sortare: luați elementul imediat după datele sortate, căutați prin datele sortate pentru a găsi un loc în care să-l plasați și plasați-l acolo. Repetați până la sfârșit.

Sortarea prin inserare poate folosi schimbarea în timpul fazei de „scanare”, dar nu este necesar și nu este cea mai eficientă modalitate decât dacă sortați o matrice de tip de date care: (a) nu poate fi mutată, doar copiat sau schimbat; și (b) mai scump de copiat decât de schimbat. Dacă sortarea prin inserare folosește swap, modul în care funcționează este că căutați simultan un loc și puneți un nou element acolo, schimbând în mod repetat noul element cu elementul imediat înaintea acestuia, atâta timp cât elementul dinaintea acestuia este mai mare decât acesta. Când ajungeți la un element care nu este mai mare, ați găsit locația corectă și veți trece la următorul element nou.

Logica pentru ambii algoritmi este destul de similară. Ambele au o submatrice parțial sortată la începutul matricei. Singura diferență este modul în care caută următorul element care urmează să fie plasat în matricea sortată.

    Sortare prin inserare: adaugă următorul element în poziția corectă;

    Sortare sortare: selectează cel mai mic element și îl schimbă cu elementul curent;

In afara de asta, Sortare prin inserare stabil, spre deosebire de Selectați Sortare.

Le-am implementat pe ambele în python și merită remarcat cât de asemănătoare sunt:

Def insertion(data): data_size = len(data) current = 1 while current< data_size: for i in range(current): if data < data[i]: temp = data[i] data[i] = data data = temp current += 1 return data

Cu o ușoară modificare, puteți efectua algoritmul de selecție Sortare.

Def selection(data): data_size = len(data) current = 0 while current< data_size: for i in range(current, data_size): if data[i] < data: temp = data[i] data[i] = data data = temp current += 1 return data

Pe scurt, cred că sortarea de sortare caută mai întâi cea mai mică valoare din matrice și apoi face schimbul, în timp ce sortarea prin inserție ia o valoare și o compară cu fiecare valoare rămasă înainte (în spatele) acesteia. Dacă valoarea este mai mică, este schimbată. Aceeași valoare este apoi comparată din nou, iar dacă este mai mică în spatele ei, este schimbată din nou. Sper că acest lucru are sens!

Sortarea selecției: pe măsură ce începeți să creați o sublistă sortată, algoritmul asigură că sublista sortată este întotdeauna complet sortată, nu numai după propriile elemente, ci și după matricea completă, adică atât sublista sortată, cât și nesortată. Astfel, cel mai mic element nou, odată găsit din sublista nesortată, va fi pur și simplu adăugat la sfârșitul sublistei sortate.

Sortare prin inserare: algoritmul împarte din nou matricea în două părți, dar aici elementul este selectat din a doua parte și inserat în poziția corectă în prima parte. Acest lucru nu garantează niciodată că prima parte va fi sortată în termeni de matrice completă, deși, desigur, ultima trecere va avea fiecare element în poziția sortată corectă.

O să mai încerc o dată: luați în considerare ce se întâmplă în cazul norocos al unui tablou aproape sortat.

La sortare, o matrice poate fi considerată ca având două părți: partea stângă este sortată, partea dreaptă este nesortată.

Sortare prin inserare - selectați primul element nesortat și încercați să găsiți un loc pentru acesta printre partea deja sortată. Deoarece căutați de la dreapta la stânga, este posibil ca primul element sortat pe care îl comparați (cel mai mare, cel mai din dreapta pe partea stângă) să fie mai mic decât elementul selectat, astfel încât să puteți continua imediat la următorul element nesortat.

Sortare prin sortare - selectați primul element nesortat și încercați să găsiți cel mai mic element din întreaga piesă nesortată și înlocuiți-le pe cele două dacă doriți. Problema este că, din moment ce partea dreaptă este nesortată, trebuie să te gândești la fiecare element de fiecare dată, deoarece nu poți fi sigur dacă există sau nu un element chiar mai mic decât cel selectat.

SELECTAREA SORTARE
Să presupunem că există o serie de numere scrise într-un mod specific/aleatoriu și putem spune că ar trebui să le ordonăm în ordine crescătoare. De asemenea, luați câte un număr și înlocuiți-l cu cel mai mic număr. disponibile în listă. făcând acest pas vom obține în cele din urmă rezultatul dorit.

INSERT SORT
Țineți cont de aceeași presupunere, dar singura diferență este că de data aceasta selectam câte un număr și îl lipim în partea pre-editată, ceea ce face comparația mai mică și, prin urmare, mai eficientă.

În scurt,

Sortare de sortare: Selectați primul element din tabloul nesortat și comparați-l cu elementele nesortate rămase. Este similar cu sortarea cu bule, dar în loc să înlocuiască fiecare element mai mic, menține actualizat indexul celui mai mic element și îl înlocuiește la sfârșitul fiecărei bucle.

Sortare prin inserare:. Este opusul sortării prin selecție, unde selectează primul element din submatricea nesortată și îl compară cu submatricea sortată și inserează cel mai mic element găsit și mută toate elementele sortate de la dreapta la primul element nesortat.

Bucla interioară a sortării prin inserție trece prin elementele deja sortate (spre deosebire de sortarea prin sortare). Acest lucru îi permite rupe bucla interioară când se găsește poziția corectă. Ceea ce înseamnă că:

  1. Bucla interioară va trece doar prin jumătate din elementele sale în cazul mediu.
  2. Bucla interioară se va rupe devreme dacă matricea este aproape sortată.
  3. Bucla interioară se va anula imediat dacă matricea este deja sortată, făcând complexitatea sortării prin inserare liniară în acest caz.

Sortarea de selecție trebuie să treacă întotdeauna prin toate elementele interioare ale buclei. Acesta este motivul pentru care sortarea prin inserare este preferată în mare parte pentru sortare. Dar, pe de altă parte, sortarea selecției face mult mai puține schimburi atomice, ceea ce poate fi mai important în unele cazuri.

Bună ziua, dragi cititori. Cum este sortată o listă? Desigur, puteți face acest lucru manual, trăgând unul după altul. Confortabil? Nu te gândi. Lasă-mă să-ți spun o modalitate mai bună.

Voi arăta un exemplu al muncii mele folosind Word 2013 ca exemplu, dar această metodă va funcționa și cu versiunile Word 2010 și 2007.

Pentru a demonstra sortarea ascendentă în Word, voi folosi o mică listă de nume.

Faceți sortare în Word

Înainte de a începe, trebuie să-l selectați cu butonul stâng al mouse-ului. Apoi, pe fila " Acasă„În capitolul” Paragraf„Există un buton special. Care? Consultați GIF-ul de mai jos.

La fereastră " Sortarea textului» puteți selecta tipul de date: text, număr sau dată; si alegeti si o metoda: ascendenta sau descendenta. Am ales tipul crescător și text.

Apropo, dacă dai clic pe buton Opțiuni", apoi puteți configura opțiuni suplimentare de sortare în Word.

Acum, pentru a finaliza sarcina noastră, trebuie să faceți clic pe „ Bine" După aceea, am primit o listă în care numele sunt aranjate de la A la Z.

Dacă trebuie să sortați într-un tabel Word, principiul este același. Selectați coloana și faceți aceiași pași. Și dacă aveți numere, atunci indicați în tip Numerele.

În general, asta e tot. Chiar dacă trebuie să sortați alfabetic în Word 2010, nu este nimic dificil, deoarece interfețele sunt similare.