计算机软件技术基础 排序实验报告

合集下载

计算机软件技术基础实验报告_2

计算机软件技术基础实验报告_2

计算机软件基础实验报告姓名学号实验目的1. 掌握C语言程序设计方法, 并学会上机调试。

2. 熟悉Huffman编码源程序,并构造Huffman树。

实验内容试设计一算法, 从包括n个元素的数组中, 求最大和最小元素, 并使得当n个元素为有序排列时, 元素之间的比较次数仅为n-1次。

在给出的Huffman编码源程序基础上, 要求画出Huffman树, 求出与等长编码相比时的压缩比。

实验要求1.根据实验内容编写算法, 并用 C 语言进行程序设计。

2.将所编程序在计算机上调试通过,并全面测试.实验结果1. 以一个含有8个元素的一维数组{1, 2, 3, 5, 7, 8, 9, 12}为例,设计程序如下:#include<stdio.h>int maxArray(int x ,int y);int minArray(int x ,int y);int main(void){int i = 0 ;int array[8]={ 1, 2, 3, 5, 7, 8, 9, 12} ;printf;do{scanf("%d",&array[i]);i++;} while(i < 8);int maxTemp = array[0];int minTemp = array[0];int maxIndex = 0;int minIndex = 0;for(i=1;i<8;i++){maxTemp = maxArray(array[i] , maxTemp);minTemp = minArray(array[i] , minTemp);}for(i=0;i<8;i++){if (maxTemp == array[i]){maxIndex = i;}if (minTemp == array[i]){minIndex = i;}}printf;return 0;}运行结果如下:2.Huffman编码源程序#include <dos.h>#include <conio.h>#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct{unsigned int weight; //结点权值unsigned int parent,lchild,rchild; //结点的父指针, 左右孩子指针}HTNode,*HuffmanTree; //动态分配数组存储哈夫曼树typedef char **HuffmanCode; //动态分配数组存储哈夫曼编码表void CreateHuffmanTree(HuffmanTree &,unsigned int*,int ); //生成哈夫曼树void HuffmanCoding(HuffmanTree,HuffmanCode &,int ); //对哈夫曼树进行编码void PrintHuffmanCode(HuffmanCode,unsigned int*,int); //显示哈夫曼编码void Select(HuffmanTree,int,int&,int&); //在数组中寻找权值最小的两个结点void main(){HuffmanTree HT; //哈夫曼树HTHuffmanCode HC; //哈夫曼编码表HCint n,i; //n是哈夫曼树叶子结点数unsigned int *w; //w存放叶子结点权值char j='y';printf("演示构造哈夫曼树.\n");printf("输入需要进行编码的字符数目.\n例如:8\n");printf("然后输入每个字符出现的次数/权值.\n");printf("例如:5 29 7 8 14 23 3 11\n");printf("自动构造一棵哈夫曼树并显示哈夫曼编码.\n");printf(" 5---0110\n 29---10\n 7---1110\n 8---1111\n 14---110\n");printf(" 23---00\n 3---0111\n 11---010\n");while(j!='N'&&j!='n'){printf("请输入字符数目:");scanf("%d",&n); //输入字符数目if(n<=1) {printf("该数不合理!\n");continue;}w=(unsigned int*)malloc(n*sizeof(unsigned int)); //开辟空间存放权值printf("请输入各字符出现的次数/权值:\n");for(i=0;i<n;i++) scanf("%d",&w[i]); //输入各字符出现的次数/权值CreateHuffmanTree(HT,w,n); //生成哈夫曼树HuffmanCoding(HT,HC,n); //进行哈夫曼编码PrintHuffmanCode(HC,w,n); //显示哈夫曼编码printf("哈夫曼树构造完毕, 还要继续吗?(Y/N)");scanf(" %c",&j);}}void CreateHuffmanTree(HuffmanTree &HT,unsigned int *w,int n){//w存放n个结点的权值, 将构造一棵哈夫曼树HTint i,m;int s1,s2;HuffmanTree p;if(n<=1) return;m=2*n-1; //n个叶子结点的哈夫曼树, 有2*n-1个结点HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode)); //开辟2*n各结点空间for(p=HT+1,i=1;i<=n;++i,++p,++w) //进行初始化{p->weight=*w;p->parent=0;p->lchild=0;p->rchild=0;}for(;i<=m;++i,++p){p->weight=0;p->parent=0;p->lchild=0;p->rchild=0;}for(i=n+1;i<=m;++i) //建哈夫曼树{Select(HT,i-1,s1,s2);//从HT[1...i-1]中选择parent为0且weight最小的两个结点, 其序号分别为s1和s2HT[s1].parent=i; HT[s2].parent=i; //修改s1和s2结点的父指针parentHT[i].lchild=s1; HT[i].rchild=s2; //修改i结点的左右孩子指针HT[i].weight=HT[s1].weight+HT[s2].weight; //修改权值}}void HuffmanCoding(HuffmanTree HT,HuffmanCode &HC,int n){//将有n个叶子结点的哈夫曼树HT进行编码, 所编的码存放在HC中//方法是从叶子到根逆向求每个叶子结点的哈夫曼编码int i,c,f,start;char *cd;HC=(HuffmanCode)malloc((n+1)*sizeof(char *)); //分配n个编码的头指针向量cd=(char *)malloc(n*sizeof(char)); //开辟一个求编码的工作空间cd[n-1]='\0'; //编码结束符for(i=1;i<=n;++i) //逐个地求哈夫曼编码{start=n-1; //编码结束位置for(c=i,f=HT[i].parent;f!=0;c=f,f=HT[f].parent) //从叶子到根逆向求编码if(HT[f].lchild==c) cd[--start]='0'; //若是左孩子编为'0'else cd[--start]='1'; //若是右孩子编为'1'HC[i]=(char *)malloc((n-start)*sizeof(char)); //为第i个编码分配空间strcpy(HC[i],&cd[start]); //将编码从cd复制到HC中}free(cd); //释放工作空间}void PrintHuffmanCode(HuffmanCode HC,unsigned int *w,int n){//显示有n个叶子结点的哈夫曼树的编码表int i;printf("HuffmanCode is :\n");for(i=1;i<=n;i++){printf(" %3d---",w[i-1]);puts(HC[i]);}printf("\n");}void Select(HuffmanTree HT,int t,int&s1,int&s2){//在HT[1...t]中选择parent不为0且权值最小的两个结点, 其序号分别为s1和s2 int i,m,n;m=n=10000;for(i=1;i<=t;i++){if(HT[i].parent==0&&(HT[i].weight<m||HT[i].weight<n)) if(m<n){n=HT[i].weight;s2=i;}else {m=HT[i].weight;s1=i;}}if(s1>s2) //s1放较小的序号{i=s1;s1=s2;s2=i;}}运行结果如下:输入数据后的运行结果:实验心得要熟练掌握程序的编写, 如果没有一定的想象能力和大量的上机实践是根本无法完成的。

【参考文档】《软件技术基础》实验报告 (1000字)-精选word文档 (16页)

【参考文档】《软件技术基础》实验报告 (1000字)-精选word文档 (16页)

本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!== 本文为word格式,下载后可方便编辑和修改! ==《软件技术基础》实验报告 (1000字)《软件技术基础》实验报告学院:XXXXXXXXX班级: XXXXXXX学号:XXXXXXXXXX姓名: XXXXXX指导老师: XXXXXX实验一顺序表的操作班级 XXXXX 学号 XXXXXXX 姓名 XXXX第 X 周星期 X 、 XXX 节成绩一、实验目的:1、掌握顺序表结构的实现方式;2、掌握顺序表常用算法的实现;3、熟悉利用顺序表解决问题的一般思路;4、参照给定的顺序表的程序样例,验证给出的顺序表的常见算法,领会顺序表结构的优点和不足。

二、实验内容:1、设计一个静态数组存储结构的顺序表,要求编程实现如下任务:(1)建立一个顺序表,首先依次输人整数数据元素(个数根据需要键盘给定)。

(2)删除指定位置的数据元素(指定元素位置通过键盘输入),再依次显示删除后的顺序表中的数据元素。

(3)查找指定数据的数据元素(指定数据由键盘输入),若找到则显示位置,若没有找到则显示0。

2、使用顺序表实现一个电话本的管理程序,电话本中的每条记录包括学号、姓名、手机号码和固定电话四项。

要求实现菜单、初始化、添加、删除和显示等功能。

三、实验结果:四、实验中遇到的问题及解决方法:相关函数书上都有一样的或类似的,因此并未遇到什么问题。

五、实验心得体会:书上的例程是含有两个元素的,改为一个元素的时候花了一些时间。

参考了书本,对书上的函数有了比较深刻的理解。

附:部分源程序#include<iostream.h>const int maxsize=100;struct stu{int id;char name[20];};struct SeqList{stu data[maxsize];int length;};//主函数int main(){SeqList L;L.length=0;stu s;cout<<"请输入三个学生的学号、姓名:\n";} for(int i=0;i<3;i++) { cin>>s.id>>; Insert(&L,s); }cout<<endl; Display(&L); int ID; cout<<"请输入要删除的学生的学号"; cin>>ID; Delete(&L,ID); cout<<endl; Display(&L); return 0;实验二链表的操作(一)班级 XXXXX 学号 XXXXXXX 姓名 XXXX第 X 周星期 X 、 XXX 节成绩一、实验目的:1、掌握单链表结构的实现方式;2、掌握单链表常用算法的实现。

计算机软件技术基础实验报告

计算机软件技术基础实验报告

}linklist;
体 linklist *creat()
{

int i;
linklist *head,*r,*q;

q=(linklist *)malloc(LEN);
head=q;

r=q;
q->next=NULL;

printf("Please input the number:\n");
scanf("%d",&i);
计算机软件技术基础实验报告
《计算机软件技术基础》实验报告
专 业 _____________ 年 级 _____________ 学 号 _____________ 学生姓名 _____________ 指导老师 _____________
南华大学计算机学院编
1 / 29
计算机软件技术基础实验报告
I 实验要求
while(p!=0)
{
printf("%d\n",p->data);
p=p->next;
}
}
void deletelist(int i,linklist *head)
{
linklist *p,*q;
int k=1;
p=head;
q=p->next;
3 / 29
计算机软件技术基础实验报告
while((q!=NULL)&&(i!=k)) {
实验一 线性表
【实验目的】
1.熟悉 VC 环境,学习如何使用 C 语言实现线性表的两种存储结构。 2.通过编程、上机调试,进一步理解线性表的基本概念,熟练运用 C 语言实现线性表基本操作。 3.熟练掌握线性表的综合应用问题。

北航计算机软件技术基础实验报告计软实验报告3——冒泡排序和快速排序

北航计算机软件技术基础实验报告计软实验报告3——冒泡排序和快速排序

实验报告实验名称冒泡排序和快速排序班级学号姓名成绩#include<stdio.h>#include<stdlib.h>#define N 20//定义用于比较和交换计数的全局变量static int compare, move;int main(){int data1[N], data2[N];int i;void bubbleSort(int[20]);void quickSort(int[20], int, int);//创建两个相同的数组用于两种排序方法for (i = 0; i<N; i++){data1[i] = rand() % 100 + 1;data2[i] = data1[i];}printf("The original array:\n");for (i = 0; i<N; i++)printf("%d ", data1[i]);//调用冒泡排序法bubbleSort(data1);//计数器置零compare = 0;move = 0;//调用快速排序法quickSort(data2, 0, N - 1);printf("Quicksort completed!The results are as follows:\n");for (i = 0; i<N; i++)printf("%d ", data2[i]);printf("\nCompare times:%d\n", compare);printf("Move times:%d", move);return 0;}//冒泡排序法void bubbleSort(int a[N]){int i, j, temp;compare = 0;move = 0;//总共循环N-2轮for (i = 0; i<N - 1; i++){//每轮循环从头开始,到有序序列前结束for (j = 0; j<N - i - 1; j++){//比较交换,将较大的数放到后面if (a[j + 1]<a[j]){temp = a[j + 1];a[j + 1] = a[j];a[j] = temp;move++;}compare++;}}printf("\n\nBubblesort completed!The results are as follows:\n");for (i = 0; i<N; i++)printf("%d ", a[i]);printf("\nCompare times:%d\n", compare);printf("Move times:%d\n\n", move);}//快速排序法void quickSort(int a[N], int left, int right){//将数组一分为二的键值int pivotkey;if (left < right){//第一次排序将数组一分为二pivotkey = partition(a, left, right);//递归调用,对数据比键值小的数组排序quickSort(a, left, pivotkey - 1);//递归调用,对数据比键值大的数组排序quickSort(a, pivotkey + 1, right);}}//进行一次快速排序int partition(int a[N], int left, int right){int key, i, low = left, high = right;//设置基准key = a[low];while (low<high){//high中数据比基准大,则向前依次查找while ((low < high) && (a[high] > key)){high--;compare++;}//如果不是两指针相遇,说明存在需要交换到low的值if (low < high){a[low] = a[high];move++;}//low中数据比基准小,则向后依次查找while ((low < high) && (a[low] <= key)){low++;compare++;}//如果不是两指针相遇,说明存在需要交换到high的值if (low<high){a[high] = a[low];move++;}}//首尾指针相遇后,将基准放入空位a[low] = key;//返回此时的键值return low;}运行结果:【结论】(结果)1.由实验结果知,编写的冒泡排序法和快速排序法都成功的将一个无序的数组排成了一个有序数组并打印输出,说明这两种算法是可行的。

软件技术基础标准实验报告01

软件技术基础标准实验报告01

电子科技大学
实验报告
学生姓名:学号:指导教师:
实验地点:实验时间:
一、实验室名称:校公共机房
二、实验项目名称:顺序表程序设计
三、实验学时:4学时
四、实验原理:
使用VS2010等C语言集成开发环境(IDE),在微型计算机上对程序进行编辑、编译、连接与运行。

通过上机练习掌握在C编译器中编辑、编译、连接、和运行C程序的方法和过程。

五、实验目的:
掌握顺序表的定义和基础操作,包括建立,插入和删除。

六、实验内容:
上机完成以下实验要求的全部函数,调试运行程序并完成报告。

七、实验器材(设备、元器件):
硬件要求:普通pc机,1G内存,100G硬盘空间即可。

软件要求:Windows 7,包括C编译器的IDE。

八、实验步骤、实验编程与运行结果:
1.源代码清单如下:
典型测试数据(输入):
应输出(上机前自己分析的结果):
上机时遇到的问题:
实际运行结果:
九、实验结论:
十、总结及心得体会:
十一、对本实验过程及方法、手段的改进建议:
报告评分:
指导教师签字:。

太原理工大学 计算机软件技术基础 顺序表的冒泡排序 实验报告

太原理工大学  计算机软件技术基础  顺序表的冒泡排序  实验报告

太原理工大学现代科技学院计算机软件技术基础课程实验报告专业班级学号姓名指导教师实验名称 顺序表的冒泡排序 同组人 专业班级 学号 姓名 成绩 实验目的与要求:理解和掌握线性表的排序技术,使用C 语言根据相应算法编写一个程序,实现顺序存储的线性表的冒泡排序。

要求仔细阅读下面的内容,编写C 程序,上机通过,并观察其结果,写出实验报告书。

实验内容:将顺序存储的长度为n 的无序线性表进行排序 具体要求: ① 根据线性表的冒泡排序的算法编写C 程序,并上机调试。

② 编写的C 程序要求将顺序存储的长度为n 的无序线性表进行排序。

③ 实验完成后,写出实验报告书。

上机程序: bubsort(p,n) int n;int p[]; { int m,k,j,i; int d; k=0;m=n-1; while (k<m) {j=m-1;m=0; for(i=k;i<=j;i++) if(p[i]>p[i+1]) {d=p[i];p[i]=p[i+1];p[i+1]=d;m=i;} j=k+1;k=0; for(i=m;i>=j;i--) if(p[i-1]>p[i]) {d=p[i];p[i]=p[i-1];p[i-1]=d;k=i;} }……………………………………装………………………………………订…………………………………………线………………………………………return;}main(){int i,n=10;int p[10];printf ("input 10 number:"); printf ("\n");for (i=0;i<10;i++)scanf("%d",&p[i]); bubsort(p,n);printf("the sorted number:"); for (i=0;i<10;i++)printf("%5d",p[i]);printf("\n");getch();}实验结果:。

实训报告排序算法

实训报告排序算法

一、实训背景排序算法是计算机科学中非常重要的基础知识,它广泛应用于数据处理、数据库、网络通信等领域。

本实训旨在通过学习几种常见的排序算法,了解它们的原理、实现方法以及优缺点,从而提高编程能力和数据处理的效率。

二、实训目的1. 理解排序算法的基本概念和原理。

2. 掌握几种常见排序算法的代码实现。

3. 分析比较不同排序算法的性能和适用场景。

4. 提高编程能力和数据处理的效率。

三、实训内容本次实训主要学习以下几种排序算法:1. 冒泡排序(Bubble Sort)2. 选择排序(Selection Sort)3. 插入排序(Insertion Sort)4. 快速排序(Quick Sort)5. 归并排序(Merge Sort)6. 堆排序(Heap Sort)四、实训过程1. 冒泡排序冒泡排序是一种简单的排序算法,其基本思想是通过比较相邻的元素,将较大的元素向后移动,从而实现排序。

下面是冒泡排序的Python实现代码:```pythondef bubble_sort(arr):n = len(arr)for i in range(n):for j in range(0, n-i-1):if arr[j] > arr[j+1]:arr[j], arr[j+1] = arr[j+1], arr[j]return arr```2. 选择排序选择排序的基本思想是每次从待排序的序列中找到最小(或最大)的元素,然后将其放到序列的起始位置。

下面是选择排序的Python实现代码:```pythondef selection_sort(arr):n = len(arr)for i in range(n):min_index = ifor j in range(i+1, n):if arr[j] < arr[min_index]:min_index = jarr[i], arr[min_index] = arr[min_index], arr[i]return arr```3. 插入排序插入排序的基本思想是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增加1的有序表。

计算机软件技术基础实验报告

计算机软件技术基础实验报告

学院:信电学院班级:姓名:学号:课程:计算机软件技术基础实验日期:2013年11月22日成绩:实验七SQL 简单查询、连接查询和子查询一、实验目的1.掌握在查询分析器中使用SELECT语句进行简单查询。

2.熟练掌握简单表的数据查询、数据排序和数据连接查询的操作方法。

3.熟练掌握数据查询中的分组、统计、计算和组合的操作方法。

4.观察查询结果, 体会SELECT语句实际应用二、实验用软件和工具1.计算机。

实验软件 VC++ 6.02.SQL Server2005软件。

三、实验步骤1 简单查询操作此部分查询包括投影、选择条件表达、数据排序、使用临时表等。

对EDUC(shiyan6)数据库实现以下查询:(1)求信电学院的学生学号和姓名;(2)求选修了课程的学生学号;(3)求选修C1 课程的学生学号和成绩,并要求对查询结果按成绩的降序排列,如果成绩相同则按学号的升序排列;(4)求选修课程C1 且成绩在80-90 之间的学生学号和成绩,并将成绩乘以系数0.75 输出;(5)求计算机系和数学系的姓张的学生的信息;(6)求缺少了成绩的学生的学号和课程号。

2 连接查询操作对EDUC(shiyan6)数据库实现以下查询:(1)查询每个学生的情况以及他(她)所选修的课程;(2)求学生的学号、姓名、选修的课程名及成绩;(3)求选修C1 课程且成绩在90 分以上的学生学号、姓名及成绩;(4)查询每一门课的间接先行课。

3.子查询操作,在数据库EDUC(shiyan6)中实现查询:学院:信电学院班级:姓名:学号:课程:计算机软件技术基础实验日期:2013年11月22日成绩:(1)求选修了高等数学的学生学号和姓名;(2)求C1 课程的成绩高于张三的学生学号和成绩;(3)求其他系中比计算机系某一学生年龄小的学生信息(即求其它系中年龄小于计算机系年龄最大者的学生);(4)求其他系中比计算机系学生年龄都小的学生信息;(5)求选修了C2 课程的学生姓名;(6)求没有选修C2 课程的学生姓名;(7)查询选修了全部课程的学生的姓名;(8)求至少选修了学号为“S2”的学生所选修的全部课程的学生学号和姓名。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
default:printf("\n %c为非法选项! \n",choose);
}
if(choose=='0') break;
printf("\n要继续选择吗(y/n)?\n");
do
{yes_no=getch();
}
while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');
}
while(yes_no=='Y'||yes_no=='y');
}
void paixu1(int n)
{ int a[MAX]; //定义5万个空间来存储数据
if(Read_num1(a,n)) Bubble_sort(a,n);
if(Read_num1(a,n)) Select_sort(a,n);
if(Read_num3(a,n))
{ Quick_sort(a, 0, n);
}
printf("排序效率如上,程序运行完毕\n");
}
int Test_num(int n)
{ freopen("测试数据.txt","w",stdout);
srand(time(NULL));
int i=0;
for(;i<n;i++)
}
int Insert_sort(int *a,int n)
{ time_t start,end; start=clock();
四.源程序清单
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include<conio.h>
#define MAX 50000 using namespace std;
void myprint();
int Bubble_sort(int *,int );//冒泡排序
if(Read_num2(a,n)) Bubble_sort(a,n);
if(Read_num2(a,n)) Select_sort(a,n);
if(Read_num2(a,n)) Insert_sort(a,n);
if(Read_num2(a,n)) { Quick_sort(a,0,n);
}
printf("排序效率如上,程序运行完毕\n");
}
void main()
{
int n; char choose='\0',yes_no='\0';
printf("\n请输入数据个数:\n");
scanf("%d",&n);
getchar();
if(Test_num(n)) printf("测试数据文件生成成功\n");
printf("测试数据文件导出成功\n");
}
void paixu3(int n)
{ int a[MAX]; //定义5万个空间来存储数据
printf("下面进行排序\n");
if(Read_num3(a,n)) Bubble_sort(a,n);
if(Read_num3(a,n)) Select_sort(a,n);
if(Read_num3(a,n)) Insert_sort(a,n);
for(i=0;i<n;i++) 8 printf("%d ",a[i]);
printf("\n选择排序用时%fms\n",difftime(end,start)); fclose(stdout);
freopen("CON","w",stdout); //输出流重新定向
printf("选择排序用时%fms\n",difftime(end,start)); return 1;
2.算法设计思想冒泡算法设计思想:
两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。程序参见源程序清单int Bubble_sort(int *a,int n)
入口参数a[i],int n;出口参数a[i],int n
插入法设计思想:
(1).从第一个元素开始,该元素可以认为已经被排序
{
printf("|---------------------------------------------|\n");
printf("|输入选项0-3 |\n");
printf("|---------------------------------------------|\n");
printf("| 1---随机排序|\n");
freopen("CON","w",stdout); //输出流重新定向
printf("冒泡排序用时%fms\n",difftime(end,start)); return 1;
}
int Select_sort(int *a,int n)
{ time_t start,end; start=clock();//记下开始的时间
end=clock();//记下结束的时间
freopen("bubble_sort.txt","w",stdout);//对输出流定向
for(i=0;i<n;i++) printf("%d ",a[i]);
printf("\n冒泡排序用时%fms\n",difftime(end,start));
fclose(stdout);
if(Read_num1(a,n)) Insert_sort(a,n);
if(Read_num1(a,n)) Quick_sort(a,0,n);
printf("排序效率如上,程序运行完毕\n");
}
void paixu2(int n)
{ int a[MAX]; //定义5万个空间来存储数据
printf("下面进行排序\n");
printf("%d ",rand()%n+1);
fclose(stdout);
freopen("CON","w",stdout);//对输出流进行重定向
return 1;
}
int Bubble_sort(int *a,int n)
{ time_t start,end; start=clock();
int i,j,temp;
int change=1;
for(i=n-1;i>=0&&change;--i)
{ change=0;
for(j=0;j<=i-1;j++) if(a[j]>a[j+1])
{ temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; change=1; }
}
printf("| 2---从小到大|\n");
printf("| 3---从大到小|\n");
printf("|---------------------------------------------|\n");
printf("| 0------退出|\n");
printf("|---------------------------|\n");
int Select_sort(int *,int );//选择排序
int Insert_sort(int *,int );//插入排序
void Quick_sort(int *,int ,int );//快排计时
void quicksort(int *,int ,int );//快排
int Read_num1(int *,int );//将数据从文件中取出
int i,j,k,temp ;
for(i=0;i<n;i++)
{ j=i ; for(k=i+1;k<n;k++)
if(a[k]<a[j]) j=k ;
if(j!=i) { temp=a[i]; a[i]=a[j]; a[j]=temp ; }
}
end=clock();//记下结束的时间
freopen("select_sort.txt","w",stdout);//对输出流定向
快速排序算法设计思想:
设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。一趟快速排序的算法是:
1)设置两个变量i、j,排序开始的时候:i=1,j=n-1;
2)以第一个数组元素作为关键数据,赋值给temp,即temp=a[0];
入口参数是int a[ ],int Left,int Right,
出口参数a[i],int n;
程序参见源程序清单void Qsort(int a[ ],int Left,int Right )
相关文档
最新文档