#include<iostream> using namespace std; #define SIZE 21 typedef int Sqlist[SIZE]; void TwayTnsertSort(Sqlist &T,Sqlist &S,int n) { int i,j,k; int first=0; int last = 0; S[first]= S[last] = T[0]; for(i=1;i<n;++i) { if(T[i] >= S[last]) { S[++last] = T[i]; } else if(T[i] < S[first]) { S[(first-1+n)%n] = T[i]; first=(first-1+n)%n; } else { S[++last] = S[last-1]; for(j=last-1;T[i]<S[(j-1+n)%n];j=(j-1+n)%n) { S[j] = S[(j-1+n)%n]; } S[j] = T[i]; } } for(k=0;k<n;++k) { T[k] = S[(first+k)%n]; } } void main() { Sqlist T= {49,38,65,97,76,13,27}; Sqlist S; TwayTnsertSort(T,S,7); for(int i=0;i<7;++i) cout<<T[i]<<" "; cout<<endl; }
分析:两路插入减少了哨兵位的使用,只能减少记录的移动次数。
时间: 2024-11-10 16:37:41