解
重寫的算法如下
void InsertSort(SeqList R)
{//對順序表中記錄R[
int i
for(i=n
if(R[i]
{
R[n]=R[i];j=i+
do{ //從左向右在有序區中查找插入位置
R[j
j++;
}while(R[j]
R[j
}//endif
}//InsertSort
解
#define int KeyType //定義KeyType 為int型
typedef struct node{
KeyType key; //關鍵字域
OtherInfoType info; //其它信息域
struct node * next; //鏈表中指針域
}RecNode; //記錄結點類型
typedef RecNode * LinkList ; //單鏈表用LinkList表示
void InsertSort(LinkList head)
{//鏈式存儲結構的直接插入排序算法
RecNode *p
if ((head
{
p=head
head
q=head;//指向插入位置的前驅節點
while(p)&&(q
q=q
if (p)
{s=p;p=p
s
q
}
}
}
解
因為只需將負數關鍵字排在前面而無需進行精確排列順序
void ReSort(SeqList R)
{//重排數組
int i=
while (i<j) //i<j表示尚未掃描完畢
{ while(i<j&&R[i]
i++;
R[
while(i<j&&R[j]
j
R[i++]=R[j];R[j
}//endwhile
}//ReSort
本算法在任何情況下的比較次數均為n(每個元素和
*
解
算法如下
void BubbleSort(SeqList R)
{//R[
int i
Boolean exchange; //交換標記
i=n;j=
exchange=TRUE;
while (i>j)&&(exchange)
{k=i
while (k>=j)//由下往上掃描
{if (r[k]>r[k+
{r[
}//endif
k
}//endwhile
if (exchange)
{exchange=FALSE;
j++;k=j+
while(k<=i)//由上往下掃描
{if (r[k]<r[k
{r[
}//endif
k++;
}endwhile
i
}//endif
}endwhile
}//endsort
void BubbleSort(int A[]
//不妨設A[
int lastExchange
while (i>
lastExchange=
for(j=
if(A[j+
交換A[j]和A[j+
lastExchange=j;
}
i=lastExchange;//將i置為最後交換的位置
}//endwhile
}//BubbleSort
解
void BubbleSort(int A[]
//不妨設A[
int lastExchange
while (i<n) //這一條很重要
lastExchange=n;
for(j=n
if(A[j
交換A[j]和A[j
lastExchange=j;
}
i=lastExchange;//將i置為最後交換的位置
}//endwhile
}//BubbleSort
解
改寫後的算法如下
void QuickSort(SeqList R
{//對R[low
int pivotpos;
if(high
{//則進行直接插入排序
InsertSort(R
}
else
{
pivotpos=midPartion(R
QuickSort(R
QuickSort(R
}
}//QuickSort
int midPartion(SeqList R
{//三者取中規則定基准
if(R[(i+j)/
{ 交換R[(i+j)/
if(R[i]
{ 交換R[i]和R[j];}
if(R[i]
{ 交換R[i]和R[(i+j)/
//以上三個if語句就使區間的第一個記錄的key值為三個key的中間值
return Partion(R
}
答
int QuickSort(SeqList R
{ //對R[low
int pivotpos
if(low<high){//僅當區間長度大於
pivotpos=Partition(R
if (pivotpos==j) return r[j];
else if (pivotpos>j) return(R
else return quicksort(R
}
} //QuickSort
答
#define int KeyType //定義KeyType 為int型
typedef struct node{
KeyType key; //關鍵字域
OtherInfoType info; //其它信息域
struct node * next; //鏈表中指針域
}RecNode; //記錄結點類型
typedef RecNode * LinkList ; //單鏈表用LinkList表示
void selectsort(linklist head)
{RecNode *p
if(head
{p=head
while (p
{q=p
while(q)
{if (q
q=q
}//endwhile
交換s結點和p結點的數據
p=p
}//endwhile
}//endif
}//endsort
From:http://tw.wingwit.com/Article/program/sjjg/201311/23604.html