-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathquickthread.cpp
More file actions
84 lines (70 loc) · 1.55 KB
/
quickthread.cpp
File metadata and controls
84 lines (70 loc) · 1.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include "quickthread.h"
QuickThread::QuickThread()
{
}
QuickThread::~QuickThread()
{
delete [] heights;
}
void QuickThread::setAttr(int number, int *heights, int speed)
{
this->number = number;
this->heights = heights;
this->speed = speed;
}
void QuickThread::setSpeed(int speed)
{
this->speed = speed;
}
void QuickThread::run()
{
//调用快速排序的函数
quickSort(0, number - 1);
//排序结束,发送结束的信号
emit sortFinish(1);
}
//快速排序
void QuickThread::quickSort(int left, int right)
{
//递归返回条件
if(left >= right)
{
return;
}
int i = left, j = right, k = left;
int direction = 0;
while(i<=j)
{
if(direction)
{
if(heights[i] > heights[k])
{
int tmp = heights[i];
heights[i] = heights[k];
heights[k] = tmp;
direction = 0;
emit returnHeights(i,k,heights);
msleep(speed);
k = i;
}
i++;
}
else
{
if(heights[j] < heights[k])
{
int tmp = heights[j];
heights[j] = heights[k];
heights[k] = tmp;
direction = 1;
emit returnHeights(j,k,heights);
msleep(speed);
k = j;
}
j--;
}
}
//递归调用次函数,依次排序左右两侧的数组
quickSort(left, k - 1);
quickSort(k + 1, right);
}