实验六 各种排序方法的比较(switch选择方法)
- 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]={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; 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++ )
{
k=i;
for(j=i+1; j
if(pvector->record[j].key
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; i
{
noswap=TRUE;
for(j=0; j
if(pvector->record[j+1].key
{
temp=pvector->record[j];
pvector->record[j]=pvector->record[j+1];
pvector->record[j+1]=temp;
noswap=FALSE;
}