• 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)

Bubble Sort

(3)

Pass -

1 1 5 4 2 6 7 1 3

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 1 4 2 5 6 1 3 7

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 1 2 4 5 1 3 6 7

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 1 2 4 1 3 5 6 7

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 1 2 1 3 4 5 6 7

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 1 2 3 4 5 6 7

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)

Selection Sort

(10)

Pass -

1 1 5 4 2 6 7 1 3 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 1 4 2 6 7 5 3 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 1 2 4 6 7 5 3 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 1 2 3 6 7 5 4 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 1 2 3 4 7 5 6 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 1 2 3 4 5 7 6 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)

Insertion Sort

(17)

Pass -

1 1 5 4 2 6 7 1 3 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 1 4 5 2 6 7 1 3

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 1 2 4 5 6 7 1 3 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 1 2 4 5 6 7 1 3 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 1 2 4 5 6 7 1 3

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 1 2 4 5 6 7 3

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)

Merge Sort

(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

4. Combine solutions to the subproblems

(27)

Divide and Conquer - Sort

Problem:

• Input: A[left..right] – unsorted array of integers

• Output: A[left..right] – sorted in non-decreasing order

(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

4. Combine sorted FirstPart and sorted SecondPart

(29)

Overview

• Divide and Conquer

• Merge Sort

(30)

Merge Sort: Idea

Merge Recursively

sort

Divide into

two halves

FirstPart SecondPart

FirstPart SecondPart

A

A is sorted!

(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)

Recursive Call

(32)

Merge-Sort: Merge

A[middle]

A[middle]

A[left]

A[left]

Sorted Sorted FirstPart FirstPart

Sorted Sorted SecondPart SecondPart

A[right]

A[right]

merge merge A: A:

A: A:

Sorted

Sorted

(33)

Merge-Sort: Merge Example

6 10 14 22 3 5 15 28

L: L: R: R:

Temporary Arrays Temporary Arrays

5 15 28 30 6 10 14

2 5 3 7 8 1 4 5 6

A: A:

(34)

Merge-Sort: Merge Example

3 5 15 28 30 6 10 14

L: L:

A: A:

3 15 28 30 6 10 14 22

R: 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: L:

A: A:

3 5 15 28 6 10 14 22

R: 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: L:

A: A:

6 10 14 22

R: 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: L:

A: A:

6 10 14 22

R: 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: L:

A: A:

6 10 14 22

R: 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: L:

A: A:

6 10 14 22

R: 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: L:

A: A:

6 10 14 22

R: 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: L:

A: A:

3 5 15 28 6 10 14 22

R: 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: L:

A: A:

3 5 15 28 6 10 14 22

R: R:

2 3 7 8 1 4 5 6

i=4 j=4

k=8

(43)

Merge(A, left, middle, right)

1. n1 ← middle – left + 1 2. n2 ← right – middle

3. create array L[n1], R[n2]

4. for i ← 0 to n1-1 do L[i] ← A[left +i]

5. for j ← 0 to n2-1 do R[j] ← A[middle+j]

6. k ← i ← j ← 0

7. while i < n1 & j < n2

8. if L[i] < R[j]

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

10. else

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

12. while i < n1

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

14. while j < n2

15. A[k++] ← R[j++] n = n1+n2 Space: n

Time : cn for some constant c

(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:

Merge-Sort(A, 0, 7)

(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:

Merge-Sort(A, 0, 7)

(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:

Merge-Sort(A, 0, 7)

(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:

Merge-Sort(A, 0, 7)

(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)

Merge-Sort(A, 0, 7), done!

(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)

Shell Sort

(70)

List Gap -

3 1 5 4 2 6 7 1 3

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+gap] = 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 1 5 4 2 6 7 1 3

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+gap] = 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 1 5 4 1 3 7 2 6

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+gap] = 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+gap] = t;

flag = 1;

}

} while(flag);

gap = gap / 2;

} }

List Gap -

1 1 4 1 3 5 2 6 7

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+gap] = t;

flag = 1;

}

} while(flag);

gap = gap / 2;

} }

List Gap -

1 1 1 3 4 2 5 6 7

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+gap] = t;

flag = 1;

}

} while(flag);

gap = gap / 2;

} }

List Gap -

1 1 1 3 2 4 5 6 7

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+gap] = t;

flag = 1;

}

} while(flag);

gap = gap / 2;

} }

List Gap -

1 1 1 2 3 4 5 6 7

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)

Quick Sort

(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)

The End

References

Related documents

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

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

serán indemnizables por el Consorcio de Compensación los daños derivados de la energía nuclear (art. Cabe preguntarnos si dentro de esta exclusión deben incorporarse los daños

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

 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. 

Dimitrova R, Gibson J, Turkel C, BONT-A CDH Study Group (2005) Botulinum toxin type A (BOTOX) for the prophylactic treatment of chronic daily headache: a randomized, double-

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

In mice subjected to PSNL, repeated once daily intrathecal injection of TAT-GESV (10 nmol i.t.) and MK-801 (5 nmol i.t.) across eight consecutive days elevated (A) mechanical