实验 各种排序方法的比较

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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.keyrecord[mid].key) right = mid - 1;

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; in; i++)

{

temp = pvector->record[i];

j = i - increment;

while (j >= 0 && temp.keyrecord[j].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;

相关文档
最新文档