排序算法验证及评价
要求:4种排序算法,将给定的不同规模大小的数据文件(data01.txt,data02.txt,data03.txt,data04.txt)进行排序,并将结果分别存储到sorted(01,02,03,04).txt文件中。
1) shellsort (希尔排序)
2) Quicksort (快速排序)
3) Heapsort(堆排序)
4) radixsort(基数排序)
付上前面三个排序得算法 ,希望对各位大哥有用
void shellinsert (SqLIist&L, int dk){ //对顺序表L作一次希尔插入排序
for (i=dk+1;i<=L.length;++i)
if(LT(L.r[i].key,l.r[i-dk].key)) { //需要将L.r[i]插入有序增量子表
L.r[0]=L.r[i]; // 暂存在L.r[0]
for(j=i-dk; j>0 && LT(L.r[0].key, L.r[j].key); j-=dk)
L.r[j+dk]=L.r[j]; // 记录后移,寻找插入位置
L.r[j+dk]=L.r[0]; // 插入
}
} // shellinsert
int Partition(Sqlist &L, int low, int high ) { // 交换顺序表L 中子表L.r[low.high]的记录,使枢轴记录到位,并返回其所在位置,此时
// 在它之前(后)的记录不大(小)于它
pivotkey=L.r[low].key;
while ( low<high ) {
while (low<high && L.r[high].key>=pivokey) --high; // 将比枢轴记录小的交换到低端
L.r[low]←→L.r[high];
while (low<high && L.r[high].key<=pivokey) ++low; // 将比枢轴大的记录交换到高端
}
L.r[low]←→L.r[high];
}
return low; // 返回枢轴所在位置
} //partition
typedef SqList HeapType; // 堆采用顺序表存储表示
void Heap Adjust (HeapType &H,int s,int m;) {
rc=H.[r]s;
for (j=2*s; j<=m;j*=2) { // 沿K 较大的孩子节点向下筛选
if(j<m &<(H.r[j].key, H.r[j+1].key)) ++j; // j 为key较大的纪录的下标
if(!LT(rc.key,H.r[j].key)) break; //rc应该插入在位置s上
H.r[s]=H.r[j]; s=j;
}
H.r[s]=rc;
} // HeapAdjust
void HeapSort (HeapType &H){
//对顺序表H进行堆排序
for (i=H.length/2;i>0;--i)
HeapAdjust (H,i,H.length);
for (i=H.length;i>1;--i){
H.r[1]←→H.r[i];
HeapAdjust (H,1,i-1);
}
}//HeapSort