You are on page 1of 18

Sorting Algorithms

.1

.
20
20
40
30
40
40
62
62
120
120
130

40

62

30

120

130

62

30

120

130

20

62

120

130

30

20

120

130

40

30

20

130

62

40

30

20

120

62

40

30

20

Data

Selection
Data
Selection
Data
Selection
Data
Selection
Data
Selection
Data

.
:
{ )public static void Select_Sort(int[] t, int i
;int j, k, w
;int n = t.length
{
{ )if (i < n
;j = i
)for (k = i + 1; k < n; k++
)]if (t[k] < t[j
;j = k
;]w = t[j
;]t[j] = t[i
;t[i] = w

;)Select_Sort(t, i + 1
}
}
;return
}

:
)public static void Itr_Select_Sort(int[] t
{
;int j, k, w,i
;int n = t.length
{
;i = 0
{ )while (i < n
;j = i
)for (k = i + 1; k < n; k++
)]if (t[k] < t[j
;j = k
;]w = t[j
;]t[j] = t[i
;t[i] = w
;i = i + 1
}
;return
}
}

1 .1


.
.
:
n n-1
n-1 . :
Maxc(n) = n-1 + Maxc(n-1) ; n >1
Maxc(1) = 0

:
)Avc(n) = Maxc(n

:
2

)n(n 1
) = O (n 2
2

n 1

Maxc(n) = Maxc(1) +

i =1

:
)n(n 1
) = O (n 2
2

n 1

= Avc(n) = Maxc(n) = i
i =1

:

. :
)Av E(n) = Max E(n
Max E(n) = 1 + Max E(n-1) for i >1
Max E(1) =0
) Av E(n) = Max E(n) = n-1 = O (n

. 2 ) (Bubble Sort


.
)(
.

.

20
40

40
62

40
20
62

62
40

62

20
30

30

30
120

120

20
120

120

20
130
130

30
130

30

130

Data
Exchanges

20
20

Data
Exchanges

62

62
120

120
130

130

20

Data
Exchanges

40
120

120
62
130

120
40
130

20

Data
Exchanges

130
120

62

40

30

20

Data
Exchanges

120

62

40

30

20

Data

130

130

30

40
30

40

62

:
)public static void Buble_Sort (int[] t
{
;int i, j, w
;int n = t.length

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

1 .2
:
. :
)n(n 1
) = O (n 2
2

n 1

= Avc(n) = Maxc(n) = i
i =1

:
...
n-2
- n-1
.:
)n(n 1
) = O (n 2
2

n 1

) (n i
i =1

= )MaxE(n

- :
MinE(n) = 0

- :
t n t ' t :
]t'[1] = t[n], t'[2] = t[n-1], .... , t'[n] = t[1


t t t
' . t

)n(n 1
2

t'. t

T n T
. ) C(t t

) p(t t:
) AVE(n) = p (t ).C (t
i T

T :
: Tc n ]t[1]<t[n
: Td n ]t[1]>t[n

t Tc t'Td . :

) p (t ).C (t ) + p (t ).C (t
t Td

= )AVE(n

t Tc

p(t) =

) AVE(n) = C (t ) + C (t
t Td
t Tc

) )AVE(n) = (C (t ) + C (t
t Tc

)n (n 1

AVE(n) =

2
t Tc

) n (n 1
AVE(n) = Tc

2

5

1
Tc Td
2

= Tc
)n (n 1
) = O (n 2
4

= )AVE(n

.3

i i 1 i

.

20

40

62

30

120

130

20

40

62

30

130

120

20

40

62

130

120

30

20

40

130

120

62

30

20

130

120

62

40

30

130

120

62

40

30

20

: .

1 .3
. t

i ] t[i

] t[0, , i-1 .
.
]T[i

:
)public static int range (int[] t,int p,int q,int x
{
;int m,r
)if (p == q
;r = p
else
{
;m = (p + q)/2
) ]if ( x < t[m
;)r = range(t, p, m, x
else
;)r = range(t, m, q, x
}
;return r
}

)public static int[] bin_insert_sort (int[] t, int i


{
;int j, k, x

)if (i >=1
{
;)bin_insert_sort(t, i - 1
)]if (t[i - 1] > t[i
{

;)]k = range(t, 0, i - 1, t[i


;]x = t[i
)for (j = i - 1; j < k; j--
;]t[j + 1] = t[j
;t[k] = x

}
}
;return t
}


:
i )) Insert_sort (t, i-1 ] t[0 ]t[k

.( k = i-1, i-2, ... ; 0:


Maxc(n) = n + Maxc(n-1) for i >1
Maxc(1) = 0

)n(n + 1
1
2
=
) = O (n 2

Maxc(n) = i = 2

.
Minc(n) = n-1

)n(n 1
) = O( n 2
4

)Avc(n

:
= 1 +
:

)n(n + 1
) = O (n 2
2

= )MaxT(1
MinT(n) = n

)n(n 1
) + 1 = O(n 2
4

= )AvT(n

2 .3

i ] t[i-1] ... t[2] t[0 .


] t[i ] t[i div 2
.
:
)public static int[] bin_insert_sort (int[] t, int i
{
;int j, k, x

)if (i >=1
{
;)bin_insert_sort(t, i - 1
)]if (t[i - 1] > t[i
{
;)]k = range(t, 0, i - 1, t[i
;]x = t[i
)for (j = i - 1; j < k; j--
;]t[j + 1] = t[j
;t[k] = x

}
}
;return t
}
)public static int place (int[] t, int i, int j,int k
{

;int p, l, w
;l = i+1
;k = j
{ )while (l <= k
)]while (t[k] > t[i
;k = k - 1
)]while (t[l] <= t[i
;l = l + 1
)if (l < k
{
;]w = t[l
;]t[l] = t[k
;t[k] = w
;k = k - 1
;l = l + 1
}
}
;]w = t[i
;]t[i] = t[k
;t[k] = w

;return k



. k :
Maxrange(k) = log k
2

:
for n >1

)Maxc(n) = 1 + Maxc(n-1) + Maxrange(n-1

:
)Maxc(n) = 1 + Maxc(n-1) + log2(n-1
Maxc(1) =0

for n >1

:
)

n 1

log k = O (n
2

Maxc(n) = (n-1) +

k =1

.4 ) (

) (Quicksort :


.


) (Pivot
.
) (
.

)place(t, i, j, k

10


]t[i], . , t[j

] t[i k .
1 .4
K L :
: L .
: K .
] a[L ] a[K L . K

20

40

62

130

120

110

120

40

62

130

20

110

120

130

62

lk

40

20

110

120

130

62

40

20

110

120

130

110

40

20

62

:
)public static int place (int[] t, int i, int j,int k
{
;int p, l, w
;l = i+1
;k = j
{ )while (l <= k
)]while (t[k] > t[i
;k = k - 1
)]while (t[l] <= t[i

11

;l = l + 1
)if (l < k
{
;]w = t[l
;]t[l] = t[k
;t[k] = w
;k = k - 1
;l = l + 1
}
}
;]w = t[i
;]t[i] = t[k
;t[k] = w
;return k
}

:
)Quick_Sort (int[] t, int i, int j

;)j,k
;)i, k - 1
;)k + 1, j

public static void


{
;int k=0
{ )if (i < j
k= place(t, i,
Quick_Sort(t,
Quick_Sort(t,

}
; return
}


:
n n+1 n-1 ) l,

(k n/2 . .

12

Quick_Sort(t,1,n)

Quick_Sort(t,1,0)

Quick_Sort(t,2,n)

Quick_Sort(t,3,n)

. . . . . . . . .

Quick_Sort(t,n-1,n-2)

Quick_Sort(t,n,n)

:
Maxc (n) = (n + 1) + (n) + ... + 3 =

(n + 2).(n + 1)
3 = O(n 2 )
2

:
. p
1 n
n 1 + . ( Avc ( p 1) + Avc (n p ) ) Avc (n)
n p =1
1 n
Avc (n) n + 1 + . ( Avc ( p 1) + Avc (n p ) )
n p =1
Avc (0) = Avc (1) = 0

A(n) Avc (n) B (n)

1
1
A(n) = n 1 + . ( A( p 1) + A(n p ) ) B (n) = n + 1 + . (B ( p 1) + B(n p ) )
n p =1
n p =1
n

13

A(0) = B(0) = 0
2 n 1
) ) A(n) = n 1 + . ( A( p
n p =1

1 n 1
) ) B (n) = n + 1 + . (B ( p
n p =1

:
A(n) = 2(n + 1) H n 4n
4
8
8

B (n) = 2(n + 1) H n = 2(n + 1) H n n


3
3
3

1
H n = Logn
i =1 i
n

:
Avc (n) 2n.Logn 1,38n. log 2 n

.5

o f1, f2, , fn o o fi i = 1, 2, , n
.

10

11

14

14

18

12

t:
] t[1
] t[i div 2 i i > 1

p .
] t[1], t[2], ..., t[p :
i p div 2
]t[i] t[2*i
] t[i] t[2*i +1

1 .5

. :
] t[p ]t[1

1
:

.
:
)r

public static void sift (int l,int


{
;int i, j
;]int [] t=new int [6
;int x
;i = l
;j = 2 * i
)while (j <= r
{
)if (j < r
)]if (t[j] > t[j + 1
;j = j + 1
)]if (t[i] <= t[j
;j = r + 1
{ else
;]x = t[i
;]t[i] = t[j

15

;t[j] = x
;i = j
}
}
;return
}

2 .5
n
:
;int l = (n / 2) + 1
;int r = n
{ )while (l > 1
;l = l - 1
;)sift(l, n
}

:
)public static void Heap_sort (int[] t
{
;int n = t.length
;int l = (n / 2) + 1
;int r = n
{ )while (l > 1
;l = l - 1
;)sift(l, n
}
)while (r > 1
{
int
;]x = t[1
;]t[1] = t[r
;t[r] = x
;r = r - 1
;)sift(1, r
}
;return
}


.
n

) log(n .

16

.6

-1

T
T[i].age = t[j].age i<j i j k l
.k < l
-

.
-
-2 .
- n

)(R

) (B ) (W

. .
- 3
-
) ( ) ( :

< < <

A > K > Q > J > 10 > 9 > 8 > 7 > 6 > 5 > 4 > 3 > 2

-3 :
- .
-

(.

17

-
:
2, 3, 4, 5, 6, 7, 8, 1
8, 1, 2, 3, 4, 5, 6, 7


.
-4
.

18

You might also like