Transcript n + 1
DUOMENŲ RIKIAVIMAS Duomenų rikiavimo aldoritmai • • • • • Minmax (intervalinis) Burbulas (porinių sukeitimų) Dalyba pusiau (mišrus) Pilnas minmax (intervalinis) Įterpimu (intarpų) Vienas paprasčiausių ir populiariausių algoritmų yra rikiavimas išrinkimo metodu (MinMax) Žodinis algoritmas • Masyve tarp elementų a1, a2, a3, ... an ieškoma didesnio už a1 ir radus jis sukeičiamas vietomis su pirmuoju a1. • Toliau masyve tarp elementų a2, a3, a4, ... an ieškoma didesnio už a2 ir radus jis sukeičiamas vietomis su antruoju a2. (pirmuoju paieškos intervale). • Toliau masyve tarp elementų a3, a4, a5, ... an ieškoma didesnio už a3 ir radus jis sukeičiamas vietomis su trečiuoju a3. (pirmuoju paieškos intervale). • Veiksmai kartojami tol kol liks vienas elementas. A[i] a1 a2 A[j] a2 Taip a3 a3 a4 ....... an-1 a4 ....... Jei a4>a1 an-1 an Pradžia MinMaxB (var A: mas; n: integer) Kintamieji c: real; i, j: integer i := 1, n-1 j := i + 1, n Taip A[j] > A[i] c := A[i]; A[i] := A[j]; A[j] := c; Pabaiga Ne MinMax metodas procedure MinMaxB(var A : mas; n : integer); var i, j : integer; c : integer; // Pagalbinis kintamasis elementų sukeitimui begin for i := 1 to n – 1 do for j := i + 1 to n do if A[j] > A[i] //rikiavimo raktas then begin c := A[i]; A[i] := A[j]; A[j] := c; end; end; MASYVO ELEMENTŲ ĮTERPIMAS IR ŠALINIMAS Įterpimas nurodytoje masyvo vietoje k Const CN = 100; type MAS = array [1..CN] of real; var A: MAS; n: integer; i := n; While i >= k do begin A[i+1] := A[i]; i := i – 1; end; A[k] := naujas; n := n + 1; //masyve pasidarė 1 elementu daugiau Įterpimas nurodytoje masyvo vietoje k n := n + 1; for i := n downto k + 1 do A[i] := A[i-1]; A[k] := naujas; Masyvo viduje (nerikiuotame masyve) n := n + 1; A[n] := A[k]; // Perkeliama reikšmė į galą A[k] := naujas; // Įrašoma nauja reikšmė Masyvo gale n := n+1; A[n] := naujas; Elemento šalinimas iš masyvo • Paskutinio elemento n := n – 1; • Viduje esančio elemento (nerikiuotame masyve) A[k] := A[n]; n := n - 1; • Viduje esančio elemento (rikiuotame masyve) for i := k to n - 1 do A[i] := A[i+1]; n := n - 1; Elemento šalinimas iš masyvo i := k; While i < n do begin A[i] := A[i+1]; i := i + 1; end; n := n - 1; //sumažinome masyvo elementų skaičių.