0%

快速排序

其实这节课并没有听太懂,但是为了防止忘记,所以直接将郝斌老师的代码扔到了博客上希望我之后多次看之后能真正理解这个排序方法,还有就是郝斌老师的数据结构课程看完了,并没有图的相关,看来我要开始自学图了,加油!!!!
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
# include <stdio.h>

int FindPos(int * a, int low, int high);
void QuickSort(int * a, int low, int high);

int main(void)
{
int a[6] = {-2, 1, 0, -985, 4, -93};
int i;

QuickSort(a, 0, 5); //第二个参数表示第一个元素的下标 第三个参数表示最后一个元素的下标

for (i=0; i<6; ++i)
printf("%d ", a[i]);
printf("\n");

return 0;
}

void QuickSort(int * a, int low, int high)
{
int pos;

if (low < high)
{
pos = FindPos(a, low, high);
QuickSort(a, low, pos-1);
QuickSort(a, pos+1, high);
}
}

int FindPos(int * a, int low, int high)
{
int val = a[low];

while (low < high)
{
while (low<high && a[high]>=val)
--high;
a[low] = a[high];

while (low<high && a[low]<=val)
++low;
a[high] = a[low];
}//终止while循环之后low和high一定是相等的

a[low] = val;

return high; //high可以改为low, 但不能改为val 也不能改为a[low] 也不能改为a[high]
}