• No results found

Sorting Procedures

N/A
N/A
Protected

Academic year: 2020

Share "Sorting Procedures"

Copied!
82
0
0

Loading.... (view fulltext now)

Full text

(1)

Bubble Sort

Selection Sort

Insertion Sort

Merge Sort

Shell Sort

Quick Sort

Sorting Procedures

(2)
(3)

Pass - 1

5

4

2

6

7

1

3

1

4

5

2

6

7

1

3

2

4

2

5

6

7

1

3

3

4

2

5

6

7

1

3

4

4

2

5

6

7

1

3

5

4

2

5

6

1

3

7

4

2

5

6

1

7

3

6

void Sort() {

for (i=0; i<(n-1); i++) { for (j=0; j<(n-i-1); j++) { if ( a[j] > a[j+1] ) { t = a[j]; a[j] = a[j+1]; a[j+1] = t; } } } }

5

4

2

6

7

1

3

Original List

0

1

2

3

4

5

6

(4)

Pass - 2

4

2

5

6

1

3

7

1

2

4

5

6

1

3

7

2

2

4

5

6

1

3

7

3

2

4

5

6

1

3

7

4

2

4

5

1

6

3

7

5

2

4

5

1

3

6

7

void Sort() {

for (i=0; i<(n-1); i++) { for (j=0; j<(n-i-1); j++) { if ( a[j] > a[j+1] ) { t = a[j]; a[j] = a[j+1]; a[j+1] = t; } } } }

4

2

5

6

1

3

7

Original List

0

1

2

3

4

5

6

(5)

Pass - 3

2

4

5

1

3

6

7

1

2

4

5

1

3

6

7

2

2

4

5

1

3

6

7

3

2

4

1

5

3

6

7

4

2

4

1

3

5

6

7

void Sort() {

for (i=0; i<(n-1); i++) { for (j=0; j<(n-i-1); j++) { if ( a[j] > a[j+1] ) { t = a[j]; a[j] = a[j+1]; a[j+1] = t; } } } }

2

4

5

1

3

6

7

Original List

0

1

2

3

4

5

6

(6)

Pass - 4

2

4

1

3

5

6

7

1

2

4

1

3

5

6

7

2

2

1

4

3

5

6

7

3

2

1

3

4

5

6

7

void Sort() {

for (i=0; i<(n-1); i++) { for (j=0; j<(n-i-1); j++) { if ( a[j] > a[j+1] ) { t = a[j]; a[j] = a[j+1]; a[j+1] = t; } } } }

2

4

1

3

5

6

7

Original List

0

1

2

3

4

5

6

(7)

Pass - 5

2

1

3

4

5

6

7

1

1

2

3

4

5

6

7

2

1

2

3

4

5

6

7

void Sort() {

for (i=0; i<(n-1); i++) { for (j=0; j<(n-i-1); j++) { if ( a[j] > a[j+1] ) { t = a[j]; a[j] = a[j+1]; a[j+1] = t; } } } }

2

1

3

4

5

6

7

Original List

0

1

2

3

4

5

6

(8)

Pass - 6

1

2

3

4

5

6

7

1

1

2

3

4

5

6

7

void Sort() {

for (i=0; i<(n-1); i++) { for (j=0; j<(n-i-1); j++) { if ( a[j] > a[j+1] ) { t = a[j]; a[j] = a[j+1]; a[j+1] = t; } } } }

1

2

3

4

5

6

7

Original List

0

1

2

3

4

5

6

(9)
(10)

Pass - 1

5

4

2

6

7

1

3

1

5

4

2

6

7

1

3

2

5

4

2

6

7

1

3

3

5

4

2

6

7

1

3

4

5

4

2

6

7

1

3

5

5

4

2

6

7

1

3

6

5

4

2

6

7

1

3

1

4

2

6

7

5

3

void Sort() { int m;

for (i=0; i<(n-1); i++) { m = i; for (j=i+1; j<n; j++) { if ( a[m] > a[j] ) m = j; } t = a[m]; a[m] = a[i]; a[i] = t; } }

5

4

2

6

7

1

3

Original List

0

1

2

3

4

5

6

(11)

Pass - 2

1

4

2

6

7

5

3

1

1

4

2

6

7

5

3

2

1

4

2

6

7

5

3

3

1

4

2

6

7

5

3

4

1

4

2

6

7

5

3

5

1

4

2

6

7

5

3

1

2

4

6

7

5

3

void Sort() { int m;

for (i=0; i<(n-1); i++) { m = i; for (j=i+1; j<n; j++) { if ( a[m] > a[j] ) m = j; } t = a[m]; a[m] = a[i]; a[i] = t; } }

1

4

2

6

7

5

3

Original List

0

1

2

3

4

5

6

(12)

Pass - 3

1

2

4

6

7

5

3

1

1

2

4

6

7

5

3

2

1

2

4

6

7

5

3

3

1

2

4

6

7

5

3

4

1

2

4

6

7

5

3

1

2

3

6

7

5

4

void Sort() { int m;

for (i=0; i<(n-1); i++) { m = i; for (j=i+1; j<n; j++) { if ( a[m] > a[j] ) m = j; } t = a[m]; a[m] = a[i]; a[i] = t; } }

1

2

4

6

7

5

3

Original List

0

1

2

3

4

5

6

(13)

Pass - 4

1

2

3

6

7

5

4

1

1

2

3

6

7

5

4

2

1

2

3

6

7

5

4

3

1

2

3

6

7

5

4

1

2

3

4

7

5

6

void Sort() { int m;

for (i=0; i<(n-1); i++) { m = i; for (j=i+1; j<n; j++) { if ( a[m] > a[j] ) m = j; } t = a[m]; a[m] = a[i]; a[i] = t; } }

1

2

3

6

7

5

4

Original List

0

1

2

3

4

5

6

(14)

Pass - 5

1

2

3

4

7

5

6

1

1

2

3

4

7

5

6

2

1

2

3

4

7

5

6

1

2

3

4

5

7

6

void Sort() { int m;

for (i=0; i<(n-1); i++) { m = i; for (j=i+1; j<n; j++) { if ( a[m] > a[j] ) m = j; } t = a[m]; a[m] = a[i]; a[i] = t; } }

1

2

3

4

7

5

6

Original List

0

1

2

3

4

5

6

(15)

Pass - 6

1

2

3

4

5

7

6

1

1

2

3

4

5

7

6

1

2

3

4

5

6

7

void Sort() { int m;

for (i=0; i<(n-1); i++) { m = i; for (j=i+1; j<n; j++) { if ( a[m] > a[j] ) m = j; } t = a[m]; a[m] = a[i]; a[i] = t; } }

1

2

3

4

5

7

6

Original List

0

1

2

3

4

5

6

(16)
(17)

Pass - 1

5

4

2

6

7

1

3

1

5

5

2

6

7

1

3

Temp

4

4

5

2

6

7

1

3

void Sort() {

for (i=1; i<n; i++) {

t = a[i] ; j = i - 1;

while( j >= 0 && a[j] > t ) { a[j+1] = a[j]; j--; } a[j+1] = t; } }

5

4

2

6

7

1

3

Original List

0

1

2

3

4

5

6

(18)

Pass - 2

4

5

2

6

7

1

3

1

4

4

5

6

7

1

3

Temp

2

2

4

5

6

7

1

3

4

5

5

6

7

1

3

2

void Sort() {

for (i=1; i<n; i++) {

t = a[i] ; j = i - 1;

while( j >= 0 && a[j] > t ) { a[j+1] = a[j]; j--; } a[j+1] = t; } }

4

5

2

6

7

1

3

Original List

0

1

2

3

4

5

6

(19)

Pass - 3

2

4

5

6

7

1

3

1

2

4

5

6

7

1

3

Temp

6

2

4

5

6

7

1

3

void Sort() {

for (i=1; i<n; i++) {

t = a[i] ; j = i - 1;

while( j >= 0 && a[j] > t ) { a[j+1] = a[j]; j--; } a[j+1] = t; } }

2

4

5

6

7

1

3

Original List

0

1

2

3

4

5

6

(20)

Pass - 4

2

4

5

6

7

1

3

1

2

4

5

6

7

1

3

Temp

7

2

4

5

6

7

1

3

void Sort() {

for (i=1; i<n; i++) {

t = a[i] ; j = i - 1;

while( j >= 0 && a[j] > t ) { a[j+1] = a[j]; j--; } a[j+1] = t; } }

2

4

5

6

7

1

3

Original List

0

1

2

3

4

5

6

(21)

Pass - 5

2

4

5

6

7

1

3

1

2

2

4

5

6

7

3

Temp

1

1

2

4

5

6

7

3

2

4

5

6

7

7

3

2

2

4

5

6

6

7

3

3

2

4

5

5

6

7

3

4

2

4

4

5

6

7

3

5

void Sort() {

for (i=1; i<n; i++) {

t = a[i] ; j = i - 1;

while( j >= 0 && a[j] > t ) { a[j+1] = a[j]; j--; } a[j+1] = t; } }

2

4

5

6

7

1

3

Original List

0

1

2

3

4

5

6

(22)

Pass - 6

1

2

4

5

6

7

3

1

1

2

4

4

5

6

7

Temp

3

1

2

3

4

5

6

7

1

2

4

5

6

7

7

2

1

2

4

5

6

6

7

3

1

2

4

5

5

6

7

4

1

2

4

4

5

6

7

5

void Sort() {

for (i=1; i<n; i++) {

t = a[i] ; j = i - 1;

while( j >= 0 && a[j] > t ) { a[j+1] = a[j]; j--; } a[j+1] = t; } }

1

2

4

5

6

7

3

Original List

0

1

2

3

4

5

6

(23)
(24)
(25)

• Divide and Conquer

• Merge Sort

(26)

Divide and Conquer

1.

Base Case

, solve the problem

directly

if it is small enough

2.

Divide

the problem into two or more

similar and smaller

subproblems

3.

Recursively

solve the subproblems

(27)

Divide and Conquer - Sort

Problem:

• Input: A[left..right] –

unsorted

array of integers

(28)

Divide and Conquer - Sort

1.

Base case

at most one element (left ≥ right), return

2. Divide

A

into two

subarrays: FirstPart, SecondPart

Two Subproblems:

sort the FirstPart

sort the SecondPart

3.

Recursively

sort FirstPart

sort SecondPart

(29)

Overview

• Divide and Conquer

(30)

Merge Sort: Idea

Merge

Recursively

sort

Divide into

two halves

FirstPart

SecondPart

FirstPart

SecondPart

A

(31)

Merge Sort: Algorithm

Merge-Sort (A, left, right)

if

left ≥ right

return

else

middle ← b(left+right)/2⎦

Merge-Sort

(A, left, middle)

Merge-Sort

(A, middle+1, right)

Merge(A, left, middle, right)

(32)

Merge-Sort: Merge

A[middle]

A[left]

Sorted

FirstPart

Sorted

SecondPart

A[right]

merge

A:

A:

Sorted

(33)

Merge-Sort: Merge Example

6

10 14 22

3

5

15 28

L:

R:

Temporary Arrays

5

15 28 30

6

10 14

5

2

3

7

8

1

4

5

6

A:

(34)

Merge-Sort: Merge Example

3

5

15 28 30

6

10 14

L:

A:

3

15 28 30

6

10 14 22

R:

i=0

j=0

k=0

2

3

7

8

1

4

5

6

1

(35)

Merge-Sort: Merge Example

1

5

15 28 30

6

10 14

L:

A:

3

5

15 28

6

10 14 22

R:

k=1

2

3

7

8

1

4

5

6

2

i=0

j=1

(36)

Merge-Sort: Merge Example

1

2

15 28 30

6

10 14

L:

A:

6

10 14 22

R:

i=1

k=2

2

3

7

8

1

4

5

6

3

j=1

(37)

Merge-Sort: Merge Example

1

2

3

6

10 14

L:

A:

6

10 14 22

R:

i=2

j=1

k=3

2

3

7

8

1

4

5

6

4

(38)

Merge-Sort: Merge Example

1

2

3

4

6

10 14

L:

A:

6

10 14 22

R:

j=2

k=4

2

3

7

8

1

4

5

6

i=2

5

(39)

Merge-Sort: Merge Example

1

2

3

4

5

6

10 14

L:

A:

6

10 14 22

R:

i=2

j=3

k=5

2

3

7

8

1

4

5

6

6

(40)

Merge-Sort: Merge Example

1

2

3

4

5

6

14

L:

A:

6

10 14 22

R:

k=6

2

3

7

8

1

4

5

6

7

i=2

j=4

(41)

Merge-Sort: Merge Example

1

2

3

4

5

6

7

14

L:

A:

3

5

15 28

6

10 14 22

R:

2

3

7

8

1

4

5

6

8

i=3

j=4

k=7

(42)

Merge-Sort: Merge Example

1

2

3

4

5

6

7

8

L:

A:

3

5

15 28

6

10 14 22

R:

2

3

7

8

1

4

5

6

i=4

j=4

k=8

(43)

Merge(A, left, middle, right)

1.

n

1

← middle – left + 1

2.

n

2

← right – middle

3.

create array L[n

1

], R[n

2

]

4.

for i ← 0 to n

1

-1 do L[i] ← A[left +i]

5.

for j ← 0 to n

2

-1 do R[j] ← A[middle+j]

6.

k ← i ← j ← 0

7.

while i < n

1

&

j < n

2

8.

if

L[i] < R[j]

9.

A[k++] ← L[i++]

10.

else

11.

A[k++] ← R[j++]

12.

while i < n

1

13.

A[k++] ← L[i++]

14.

while j < n

2

15.

A[k++] ← R[j++]

n = n

1

+n

2

Space: n

(44)

Merge-Sort(A, 0, 7)

6 2 8 4 3 7 5 1

6 2 8

4

3 7 5

1

Divide

A:

(45)

6 2 8

4

3 7 5

1

6 2

8

4

Merge-Sort(A, 0, 3) , divide

A:

Merge-Sort(A, 0, 7)

(46)

3 7 5

1

8

4

6 2

6

2

Merge-Sort(A, 0, 1), divide

A:

Merge-Sort(A, 0, 7)

(47)

3 7 5

1

8

4

6

2

Merge-Sort(A, 0, 0) , base case

A:

(48)

3 7 5

1

8

4

6

2

Merge-Sort(A, 0, 0), return

A:

Merge-Sort(A, 0, 7)

(49)

3 7 5

1

8

4

6

2

Merge-Sort(A, 1, 1), base case

A:

(50)

3 7 5

1

8

4

6

2

Merge-Sort(A, 1, 1), return

A:

Merge-Sort(A, 0, 7)

(51)

3 7 5

1

8

4

2

6

Merge(A, 0, 0, 1)

A:

Merge-Sort(A, 0, 7)

(52)

3 7 5

1

8

4

2

6

Merge-Sort(A, 0, 1), return

A:

Merge-Sort(A, 0, 7)

(53)

3 7 5

1

8

4

2

6

Merge-Sort(A, 2, 3)

4

8

, divide

A:

Merge-Sort(A, 0, 7)

(54)

3 7 5

1

4

2

6

8

Merge-Sort(A, 2, 2), base case

A:

(55)

3 7 5

1

4

2

6

8

Merge-Sort(A, 2, 2),

return

A:

Merge-Sort(A, 0, 7)

(56)

4

2

6

8

Merge-Sort(A, 3, 3), base case

A:

(57)

3 7 5

1

4

2

6

8

Merge-Sort(A, 3, 3), return

A:

Merge-Sort(A, 0, 7)

(58)

3 7 5

1

2

6

4 8

Merge(A, 2, 2, 3)

A:

Merge-Sort(A, 0, 7)

(59)

3 7 5

1

2

6

4 8

Merge-Sort(A, 2, 3), return

A:

Merge-Sort(A, 0, 7)

(60)

3 7 5

1

2 4 6

8

Merge(A, 0, 1, 3)

A:

Merge-Sort(A, 0, 7)

(61)

3 7 5

1

2 4 6

8

Merge-Sort(A, 0, 3), return

A:

Merge-Sort(A, 0, 7)

(62)

3 7 5 1

2 4 6

8

Merge-Sort(A, 4, 7)

A:

Merge-Sort(A, 0, 7)

(63)

1 3 5 7

2 4 6

8

A:

Merge (A, 4, 5, 7)

Merge-Sort(A, 0, 7)

(64)

1 3 5 7

2 4 6

8

Merge-Sort(A, 4, 7), return

A:

Merge-Sort(A, 0, 7)

(65)

1 2 3 4 5 6 7 8

Merge(A, 0, 3, 7)

A:

Merge-Sort(A, 0, 7)

(66)

List Size - 1

5

4

4

5

4

5

2

6

1

7

3

6

2

2

6

4

5

7

1

1

7

2

6

4

5

5

4

6

2

7

1

3

Original List

1

2

3

4

5

6

7

(67)

List Size - 2

4

5

2

6

2

4

5

6

1

7

3

2

4

5

6

1

3

7

4

5

2

6

1

7

3

Original List

1

2

3

4

5

6

7

(68)

List Size - 4

2

4

5

6

1

3

7

1

2

3

4

5

6

7

2

4

5

6

1

3

7

Original List

1

2

3

4

5

6

7

(69)
(70)

List Gap - 3

5

4

2

6

7

1

3

1

5

4

2

6

7

1

3

2

5

4

2

6

7

1

3

3

5

4

1

3

7

2

6

void Sort() {

int gap, flag; gap = n / 2; while( gap > 0 ) { do { flag = 0; for(i=1; i<=(n-gap); i++) if( a[i] > a[i+gap] ) { t = a[i]; a[i] = a[i+gap]; a[i+ga p] = t; flag = 1; } } while(flag); gap = gap / 2; } }

5

4

1

6

7

2

3

4

5

4

2

6

7

1

3

Original List

1

2

3

4

5

6

7

(71)

List Gap - 3

5

4

2

6

7

1

3

1

5

4

2

6

7

1

3

2

5

4

2

6

7

1

3

3

5

4

1

3

7

2

6

void Sort() {

int gap, flag; gap = n / 2; while( gap > 0 ) { do { flag = 0; for(i=1; i<=(n-gap); i++) if( a[i] > a[i+gap] ) { t = a[i]; a[i] = a[i+gap]; a[i+ga p] = t; flag = 1; } } while(flag); gap = gap / 2; } }

5

4

1

6

7

2

3

4

5

4

1

3

7

2

6

Original List

1

2

3

4

5

6

7

(72)

List Gap - 1

5

4

1

3

7

2

6

1

4

5

1

3

7

2

6

2

4

1

5

3

7

2

6

3

4

1

3

5

2

6

7

4

1

3

5

7

2

6

4

4

1

3

5

7

2

3

5

4

1

3

5

2

7

6

6

…contd.

void Sort() {

int gap, flag; gap = n / 2; while( gap > 0 ) { do { flag = 0; for(i=1; i<=(n-gap); i++) if( a[i] > a[i+gap] ) { t = a[i]; a[i] = a[i+gap]; a[i+ga p] = t; flag = 1; } } while(flag); gap = gap / 2; } }

5

4

1

3

7

2

6

Original List

1

2

3

4

5

6

7

(73)

…contd.

…contd. from previous

void Sort() {

int gap, flag; gap = n / 2; while( gap > 0 ) { do { flag = 0; for(i=1; i<=(n-gap); i++) if( a[i] > a[i+gap] ) { t = a[i]; a[i] = a[i+gap]; a[i+ga p] = t; flag = 1; } } while(flag); gap = gap / 2; } }

List Gap - 1

4

1

3

5

2

6

7

1

1

4

3

5

2

6

7

2

1

3

4

5

2

6

7

3

1

3

4

2

5

6

7

1

3

4

5

2

6

7

4

1

3

4

2

5

6

7

5

1

3

4

2

5

6

7

6

4

1

3

5

2

6

7

Original List

1

2

3

4

5

6

7

(74)

…contd.

…contd. from previous

void Sort() {

int gap, flag; gap = n / 2; while( gap > 0 ) { do { flag = 0; for(i=1; i<=(n-gap); i++) if( a[i] > a[i+gap] ) { t = a[i]; a[i] = a[i+gap]; a[i+ga p] = t; flag = 1; } } while(flag); gap = gap / 2; } }

List Gap - 1

1

3

4

2

5

6

7

1

1

3

4

2

5

6

7

2

1

3

4

2

5

6

7

3

1

3

2

4

5

6

7

1

3

2

4

5

6

7

4

1

3

2

4

5

6

7

5

1

3

2

4

5

6

7

6

1

3

4

2

5

6

7

Original List

1

2

3

4

5

6

7

(75)

…contd.

…contd. from previous

void Sort() {

int gap, flag; gap = n / 2; while( gap > 0 ) { do { flag = 0; for(i=1; i<=(n-gap); i++) if( a[i] > a[i+gap] ) { t = a[i]; a[i] = a[i+gap]; a[i+ga p] = t; flag = 1; } } while(flag); gap = gap / 2; } }

List Gap - 1

1

3

2

4

5

6

7

1

1

3

2

4

5

6

7

2

1

2

3

4

5

6

7

3

1

2

3

4

5

6

7

1

2

3

4

5

6

7

4

1

2

3

4

5

6

7

5

1

2

3

4

5

6

7

6

1

3

2

4

5

6

7

Original List

1

2

3

4

5

6

7

(76)

…contd.

…contd. from previous

void Sort() {

int gap, flag; gap = n / 2; while( gap > 0 ) { do { flag = 0; for(i=1; i<=(n-gap); i++) if( a[i] > a[i+gap] ) { t = a[i]; a[i] = a[i+gap]; a[i+ga p] = t; flag = 1; } } while(flag); gap = gap / 2; } }

List Gap - 1

1

2

3

4

5

6

7

1

1

2

3

4

5

6

7

2

1

2

3

4

5

6

7

3

1

2

3

4

5

6

7

1

2

3

4

5

6

7

4

1

2

3

4

5

6

7

5

1

2

3

4

5

6

7

6

1

2

3

4

5

6

7

Original List

1

2

3

4

5

6

7

(77)
(78)

5

4

2

6

7

1

3

Original List

No. of Lists - 1

5

4

2

6

7

1

3

3

4

2

6

7

1

5

3

4

2

5

7

1

6

3

4

2

1

7

5

6

3

4

2

1

5

7

6

3

4

2

1

5

7

6

(79)

3

4

2

1

5

7

6

Original List

No. of Lists - 2

5

1

4

2

3

1

3

2

4

1

2

3

4

1

2

3

4

1

2

3

4

3

4

2

1

7

6

(80)

1

2

3

4

5

7

6

Original List

No. of Lists - 3

3

5

1

2

1

2

4

7

6

(81)

1

2

3

4

5

7

6

Original List

No. of Lists - 2

5

6

7

6

7

1

2

3

4

5

7

6

1

2

3

4

7

6

(82)

References

Related documents

Bubble Sort Selection Sort Insertion Sort Merge Sort Shell Sort Quick

• Internal sort: the list is small enough to sort entirely in main memory.. - bubble sort, insertion sort, quick sort, heap sort,

The research will discuss and implement several sorting algorithms such as bubble sort, selection sort, insertion sort and will also include complexity sort such as quick

the land. In the 1920s and 1930s, land grabbing was prevalent in agricultural regions in the Philippines. The refusal of tenants to vacate the land could be traced, in some

strategies with your IT business model, optimizing the integration of the Oracle E-Business Suite with your current systems and processes.... What

 The total quantity of PAHs detected in the dry season are higher than those of the rainy season in marshy soil samples collected in Warri city in this study period. 

Finally, we provided a proof-of-concept by combining rep B and placI for expression of GFP gene in Shewanella , and followed by demonstrated expression of Mtr path- way as

Building on the marketing analytics in the core part of the program, this course looks at Search Engine Optimization (improving the ranking of web- sites on Google and other