实验六 各种排序方法的比较(switch选择方法)

合集下载
  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]={49,37,65,97,76,13,27,49,7,71};

typedef int KeyType;

typedef int DataType;

typedef struct

{

KeyType key;

DataType info;

}RecordNode;

typedef struct Sort

{

int n;

RecordNode *record;

}SortObject;

struct Node;

typedef struct Node ListNode;

struct Node

{

KeyType 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)

{

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++ )

{

k=i;

for(j=i+1; jn; j++)

if(pvector->record[j].keyrecord[k].key) k=j;

if(k!=i)

{

temp=pvector->record[i];

pvector->record [i]= pvector->record [k];

pvector->record [k]=temp;

}

}

}

/*冒泡排序*/

void bubbleSort(SortObject * pvector)

{

int i, j, noswap;

RecordNode temp;

for(i=0; in-1; i++)

{

noswap=TRUE;

for(j=0; jn-i-1; j++)

if(pvector->record[j+1].keyrecord[j].key)

{

temp=pvector->record[j];

pvector->record[j]=pvector->record[j+1];

pvector->record[j+1]=temp;

noswap=FALSE;

}

相关文档
最新文档