实验 各种排序方法的比较
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验六各种排序方法的比较
一、实验目的
1.通过实验掌握排序的基本概念,对排序的稳定性及排序的时间复杂性有深刻的认识。
2.掌握各种排序方法的基本思想和算法实现。
3.能够灵活地选用某种排序方法解决问题。
二、实验要求
1.认真阅读和掌握本实验的参考程序。
2.保存程序的运行结果,并结合程序进行分析。
三、实验内容
编写一个程序,对所给的数据(程序中给出或通过键盘初始化均可)进行排序,要求尽可能多的选择不同的排序算法,并显示排序前和排序后的结果。
#include
#include
#define TRUE 1
#define FALSE 0
#define N 10
int a[10] = { 9,27,45,87,17,23,25,92,8,75 };
typedef struct
{
int key;
int info;
}RecordNode;
typedef struct Sort
{
int n; //记录个数
RecordNode *record;
}SortObject;
/*直接插入排序*/
void insertSort(SortObject *pvector)
{
int i, j;
RecordNode temp;
for (i = 1; i < pvector->n; i++)
{
temp = pvector->record[i]; j = i - 1;
while ((temp.key < pvector->record[j].key) && (j >= 0))
{
pvector->record[j + 1] = pvector->record[j]; j--;
}
if (j != (i - 1)) pvector->record[j + 1] = temp;
}
}
/*二分法插入排序*/
void binSort(SortObject * pvector)
{
int i, j, left, mid, right;
RecordNode temp;
for (i = 1; i < pvector->n; i++)
{
temp = pvector->record[i]; left = 0; right = i - 1;
while (left <= right)
{
mid = (left + right) / 2;
if (temp.key
else left = mid + 1;
}
for (j = i - 1; j >= left; j--)
pvector->record[j + 1] = pvector->record[j];
if (left != i) pvector->record[left] = temp;
}
}
struct Node;
typedef struct Node ListNode;
struct Node
{
int key;
ListNode *next;
};
typedef ListNode * LinkList;
void listSort(LinkList * plist)
{
ListNode *now, *pre, *p, *q, *head;
head = *plist;
pre = head->next;
if (pre == NULL) return;
now = pre->next;
if (now == NULL) return;
while (now != NULL)
{
q = head; p = head->next;
while (p != now && p->key <= now->key) { q = p; p = p->next; }
if (p == now) { pre = pre->next; now = pre->next; continue; }
pre->next = now->next;
q->next = now; now->next = p;
now = pre->next;
}
}
/*Shell排序*/
void shellSort(SortObject * pvector, int d)
{ /* 按递增序进行Shell排序 */
int i, j, increment;
RecordNode temp;
for (increment = d; increment > 0; increment /= 2)
{
for (i = increment; i
{
temp = pvector->record[i];
j = i - increment;
while (j >= 0 && temp.key
{
pvector->record[j + increment] = pvector->record[j];
j -= increment;
}
pvector->record[j + increment] = temp;
}
}
}
/*直接选择排序*/
void selectSort(SortObject * pvector)
{
int i, j, k;
RecordNode temp;
for (i = 0; i < pvector->n - 1; i++)
{ /* 做n-1趟选择排序 */
k = i;