欢迎大家光顾论坛 http://jobexam.net
【题目】有一个顺序表L,其元素为整型数据,设计一个算法,将L中所有小于表头的元素的整数放在前半部分,大于表头元素的整数放在后半部分。
【解析】这道其实就是快速排序的一趟排序。下面的代码是算法导论里面使用的。我觉得很好。
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
#include "Partition.h"
#include <iostream>
using
namespace
std;
void
partition(
int
A[],
int
length)
{
int
tmp;
int
j = 0;
for
(
int
i=1; i<length; i++)
{
if
(A[i] <= A[0])
{
tmp = A[j+1];
A[j+1] = A[i];
A[i] = tmp;
j++;
}
}
}
int
main(
char
**argv,
int
argc)
{
int
A[] = {20,10,5,11,25,3,22,7};
partition(A, 8);
for
(
int
i=0; i<8; i++)
{
cout << A[i] <<
" "
;
}
system
(
"PAUSE"
);
return
0;
}
|