(1)冒泡排序
头文件:
#define
MAXSIZE20
#define EQ(a,b)((a)==(b))
#define LT(a,b)((a)<(b))
#define LQ(a,b)((a)<=(b))
typedef int KeyType;
typedef int InfoType;
typedef struct ... {
KeyTypekey;
InfoTypeotherinfo;
} RedType;
typedef struct ... {
RedTyper[MAXSIZE+1];
intlength;
} SqList;
#define EQ(a,b)((a)==(b))
#define LT(a,b)((a)<(b))
#define LQ(a,b)((a)<=(b))
typedef int KeyType;
typedef int InfoType;
typedef struct ... {
KeyTypekey;
InfoTypeotherinfo;
} RedType;
typedef struct ... {
RedTyper[MAXSIZE+1];
intlength;
} SqList;
源文件:
#include
"
sort.h
"
#include " stdio.h "
void init(SqList & s, int w[], int n) ... {
s.length=n;
for(inti=1;i<=n;i++)...{
s.r[i].key=w[i-1];
}
}
void show(SqLists) ... {
for(inti=1;i<=s.length;i++)...{
printf("%d ",s.r[i]);
}
printf(" ");
}
void bubbleSort(SqList & s) ... {
intflag=1;
for(inti=s.length;i>=1&&flag;i--)...{
flag=0;
for(intj=1;j<=i;j++)...{
if(LT(s.r[j].key,s.r[j-1].key))...{
RedTyperc=s.r[j-1];
s.r[j-1]=s.r[j];
s.r[j]=rc;
flag=1;
}
}
}
}
void main() ... {
intw[]=...{49,38,65,97,76,13,27,49};
intn=8;
SqLists;
init(s,w,n);
bubbleSort(s);
show(s);
}
#include " stdio.h "
void init(SqList & s, int w[], int n) ... {
s.length=n;
for(inti=1;i<=n;i++)...{
s.r[i].key=w[i-1];
}
}
void show(SqLists) ... {
for(inti=1;i<=s.length;i++)...{
printf("%d ",s.r[i]);
}
printf(" ");
}
void bubbleSort(SqList & s) ... {
intflag=1;
for(inti=s.length;i>=1&&flag;i--)...{
flag=0;
for(intj=1;j<=i;j++)...{
if(LT(s.r[j].key,s.r[j-1].key))...{
RedTyperc=s.r[j-1];
s.r[j-1]=s.r[j];
s.r[j]=rc;
flag=1;
}
}
}
}
void main() ... {
intw[]=...{49,38,65,97,76,13,27,49};
intn=8;
SqLists;
init(s,w,n);
bubbleSort(s);
show(s);
}
程序执行结果:
13
27
38
49
49
65
76
97
Pressanykeyto continue
Pressanykeyto continue
程序的复杂度为:O(n * n)。
(2)快速排序
源文件修改:
//
user[low]aspivottopartfromlowtohigh.
int partition(SqList & s, int low, int high) ... {
s.r[0]=s.r[low];
KeyTypekey=s.r[low].key;
while(low<high)...{
while(low<high&&s.r[high].key>=key)...{
high--;
}
s.r[low]=s.r[high];
while(low<high&&s.r[low].key<=key)...{
low++;
}
s.r[high]=s.r[0];
}
returnlow;
}
void qSort(SqList & s, int low, int high) ... {
if(low<high)...{
intpivot=partition(s,low,high);
qSort(s,low,pivot-1);
qSort(s,pivot+1,high);
}
}
void quickSort(SqList & s) ... {
qSort(s,1,s.length);
}
void main() ... {
intw[]=...{49,38,65,97,76,13,27,49};
intn=8;
SqLists;
init(s,w,n);
quickSort(s);
show(s);
}
int partition(SqList & s, int low, int high) ... {
s.r[0]=s.r[low];
KeyTypekey=s.r[low].key;
while(low<high)...{
while(low<high&&s.r[high].key>=key)...{
high--;
}
s.r[low]=s.r[high];
while(low<high&&s.r[low].key<=key)...{
low++;
}
s.r[high]=s.r[0];
}
returnlow;
}
void qSort(SqList & s, int low, int high) ... {
if(low<high)...{
intpivot=partition(s,low,high);
qSort(s,low,pivot-1);
qSort(s,pivot+1,high);
}
}
void quickSort(SqList & s) ... {
qSort(s,1,s.length);
}
void main() ... {
intw[]=...{49,38,65,97,76,13,27,49};
intn=8;
SqLists;
init(s,w,n);
quickSort(s);
show(s);
}
程序执行结果:
13
27
38
49
49
65
76
97
Pressanykeyto continue
Pressanykeyto continue
算法的复杂度为:平均O(n * log(n)),最坏O(n * n)。