目录
一个线性表中的元素为正整数或负整数,设计一个算法,将正整数和负整数分开,使线性表前一半为负整数,后一半为正整数,不要求对这些元素排序,但要求尽量减少交换次数。P204
冒泡排序的平均时间复杂度为O(n^2)
快速排序方法的时间复杂度为O(nlog2n)
推排序的时间复杂度为O(nlog2n)
直接插入算法 O(n2) P185 【1904真题】
void StraightInsertSort(List R,int n)
{
int i,j;
for(i=2;i<=n;i++) //n为表长,从第二个记录起进行插入
{
R[0]=R[i]; //第i个记录复制为岗哨
j=i-1;
while(R[0].key<R[j].key) //与岗哨比较,直至键值不大于岗哨键值
{
R[j+1]=R[j]; //将第j个记录赋值给第j+1个记录
j--;
}
R[j+1]=R[0]; //将第i个记录插入到序列中
}
}
冒泡排序 O(n2) 【1910真题】
void BubbleSort(List R,int n){
int i,j,temp,endsort;
for(i=1;i<n-1;i++){
endsort=0;
for(j=1;j<n-i-1;j++)
{
if(R[j].key>R[j+1].key)
{
temp=R[j];
R[j]=R[j+1];
R[j+1]=temp;
endsort=1;
}
}
if(endsort==0) break;
}
}
快速排序
int QuickPartition(List R,int low,int high){
x