1 ( 65分 )
設待排序數據元素的關鍵字爲:65,78,21,30,80,7,79,57,35,26,請按照下列算法對這組數據元素按關鍵字升序排序(以教材所給出算法爲標準),給出每個算法的前2趟排序結果。
注意:不要寫錯關鍵字造成扣分,比如35寫成36
A.直接插入排序;
B.簡單選擇排序;
C.冒泡排序;
D.快速排序;
E.兩路合併排序;
F.堆排序(注意要先給出調整好的最大堆,再寫前2趟結果).
F.堆排序(注意要先給出調整好的最大堆,再寫前2趟結果). 過程
2 ( 20分 )
請對元素序列27, 6, 32, 48, 26, 17, 63進行排序(注意:不要寫錯關鍵字造成扣分):
(1) 請用直接插入排序算法進行排序,寫出第一趟排序結果:____________。
(2) 請用冒泡排序算法進行排序,寫出第一趟排序結果:____________。
(3) 請用兩路合併排序算法進行排序,寫出第一趟排序結果:____________。
(4) 請用快速排序算法進行排序,寫出第一趟排序結果:____________。
3 ( 15分 )
已知一組待排序元素關鍵字爲:24,33,12,17,33,15,12
請寫出3趟快速排序的結果(注意以下劃線區分相同關鍵字,結果沒標明下劃線判錯)。
4 ( 20分 )
待排序數據元素以單鏈表方式存儲,完成下列基於單鏈表的簡單選擇排序算法。
單鏈表結點結構體定義如下:
typedef struct node{
int key; //簡單起見,只定義排序關鍵字且爲整數
struct node* link; //指針域
}Node;
void SelectSort(Node *first)
{
Node * small, p, q; int temp;
for (p=first; (1) ; (2) ){
small=p;
for (q=p->link; q!=NULL; q=q->link) // 找最小值
if ( (3) ) //
small=q;
//元素值交換
temp = p->data;
(4) ;
(5) ;
}
}
參考答案示例
#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int data; //簡單起見,只定義排序關鍵字且爲整數
struct node* link; //指針域
}Node;
void SelectSort(Node *first)
{
Node *small, *p, *q;
int temp;
for (p=first; p!=NULL; p=p->link)
{
small=p;
for (q=p->link; q!=NULL; q=q->link) // 找最小值
{
if (small->data > q->data) //
small=q;
}
//元素值交換
temp = p->data;
p->data = small->data;
small->data = temp;
}
}
int main()
{
Node * first = (Node *)malloc(sizeof(Node *));
first->data = 10;
first->link = NULL;
Node * second = (Node *)malloc(sizeof(Node *));
second->data = 8;
second->link = NULL;
first->link = second;
Node * third = (Node *)malloc(sizeof(Node *));
third->data = 4;
third->link = NULL;
second->link = third;
Node * fourth = (Node *)malloc(sizeof(Node *));
fourth->data = 2;
fourth->link = NULL;
third->link = fourth;
Node * firth = (Node *)malloc(sizeof(Node *));
firth->data = 3;
firth->link = NULL;
fourth->link = firth;
SelectSort(first);
for(Node *p = first; p != NULL; p=p->link)
{
printf("%d ",p->data);
}
for(Node *q = first; q != NULL; q=q->link)
{
free(q);
}
return 0;
}
運行示例:
-------------------
2 3 4 8 10 %
-------------------