基础排序算法演示
2006-04-25 23:42
267 查看
满脑子都是阶段/状态/决策……学无止境呀
发一点基本的排序算法,分成很多个文件写的,每个文件前面带了注释,一起发出来,结构如下:
基础排序算法文件结构
演示按 随机化数据->输出->排序->输出 的流程进行,算法很简单不想多说。
/**//* sort.h: 排序算法演示头文件 */
#include <stdio.h>
#define MAXN 100
typedef struct
...{
int key;
int data;
} Record;
/**//*
几种排序算法演示
by DaNmarner
Email: DaNmarner@gmail.com
*/
#include "sort.h"
int Random(Record r[],int n);
int printkeys(Record r[],int n);
int ifcontinue(void);
void InsSort (Record r[],int n);
void ShellSort (Record[],int n);
void BubbleSort(Record r[],int n);
void QuickSort (Record r[],int s,int t);
int main(void)
...{
Record r[MAXN];
int n=10;
printf ("Show sorts by DaNmarner 2006.4 ");
printf ("How much record to be sorted ( n<100 ) ?");
scanf ("%d",&n);
puts("");
//演示插入排序
puts("InsSort ready! ");
ifcontinue();
Random(r,n);
puts("Before InsSort:");
printkeys(r,n);
InsSort(r,n);
puts("After InsSort:");
printkeys(r,n);
puts("");
//插入排序结束
//演示希尔排序
puts("ShellSort ready! ");
ifcontinue();
Random(r,n);
puts("Before ShellSort:");
printkeys(r,n);
ShellSort(r,n);
puts("After ShellSort:");
printkeys(r,n);
puts("");
//希尔排序结束
//演示冒泡排序
puts("BubbleSort ready! ");
ifcontinue();
Random(r,n);
puts("Before BubbleSort:");
printkeys(r,n);
BubbleSort(r,n);
puts("After BubbleSort:");
printkeys(r,n);
puts("");
//冒泡排序结束
//演示快速排序
puts("QuickSort ready! ");
ifcontinue();
Random(r,n);
puts("Before QuickSort:");
printkeys(r,n);
QuickSort(r,0,n-1);
puts("After QuickSort:");
printkeys(r,n);
puts("");
//演示快速结束
//演示堆排序
puts("HeapSort ready! ");
ifcontinue();
Random(r,n);
puts("Before HeapSort:");
printkeys(r,n);
QuickSort(r,0,n-1);
puts("After HeapSort:");
printkeys(r,n);
puts("");
//演示堆结束
system("PAUSE");
return 0;
}
/**//* printkeys.c: 输出排序关键字 */
#include "sort.h"
int printkeys (Record r[],int n)
...{
int i;
for (i=0;i<n;i++)
printf("%d ",r[i].key);
printf (" ");
return i;
}
/**//* ifcontinue.c: 控制是否继续演示 */
#include <stdio.h>
#include <stdlib.h>
int ifcontinue(void)
...{
int c;
puts("Press any key to continue, q to quit... ");
if ((c=getchar())=='q') exit(1);
}
/**//* random.c: 用随机数给r[0].key-r[n-1].key赋值 */
#include <stdlib.h>
#include <time.h>
#include "sort.h"
int Random (Record r[],int n)
...{
int i;
srand(time(NULL));
for (i=0;i<n;i++)
r[i].key=rand();
return n;
}
/**//* bubblesort.c: 演示冒泡排序 */
#include "sort.h"
void BubbleSort(Record r[],int n)
...{
int i,j,done=0;
Record tmp;
for (i=0; !done && i<n; i++)...{
done=1;
for (j=1;j<n-i;j++)
if (r[j-1].key>r[j].key)...{
tmp=r[j-1];
r[j-1]=r[j];
r[j]=tmp;
done=0;
}
}
}
/**//* quicksort.c 快速排序算法 */
#include "sort.h"
void QuickSort (Record r[],int s,int t)
...{
int low=s;
int high=t;
Record pivot;
pivot=r[s];
while (low<high)...{
while (low<high && r[high].key>pivot.key)
high--;
if (low<high) r[low++]=r[high];
while (low<high && r[low].key<pivot.key)
low++;
if (low<high) r[high--]=r[low];
}
r[low]=pivot;
if (s<low) QuickSort(r,s,low-1);
if (t>high) QuickSort(r,high+1,t);
}
/**//* inssort.c: 插入排序算法 */
#include "sort.h"
void InsSort (Record r[],int n)
...{
int i,j;
Record tmp;
for (i=1;i<n;i++) ...{
tmp=r[i];
for (j=i-1; j>=0 && tmp.key < r[j].key; j--)
r[j+1]=r[j];
r[j+1]=tmp;
}
}
/**//* shellsort.c: 希尔排序算法*/
#include "sort.h"
void ShellSort (Record r[],int n)
...{
int i,j,dk=n/2;
Record tmp;
while (dk > 0) ...{
for (i=dk;i<n;i++) ...{
tmp=r[i];
for (j=i-dk;j>=0 && tmp.key<r[j].key;j-=dk)
r[j+dk]=r[j];
r[j+dk]=tmp;
}
dk/=2;
}
}
发一点基本的排序算法,分成很多个文件写的,每个文件前面带了注释,一起发出来,结构如下:
Sort.h | 头文件 |
main.c | 主演示程序 |
printkeys.c | 数据输出 |
ifcontinue.c | 演示控制 |
random.c | 随机初始化数据 |
bubblesort.c | 冒泡排序算法 |
quicksort.c | 快速排序算法 |
insort.c | 插入排序算法 |
shellsort.c | 希尔排序算法 |
/**//* sort.h: 排序算法演示头文件 */
#include <stdio.h>
#define MAXN 100
typedef struct
...{
int key;
int data;
} Record;
/**//*
几种排序算法演示
by DaNmarner
Email: DaNmarner@gmail.com
*/
#include "sort.h"
int Random(Record r[],int n);
int printkeys(Record r[],int n);
int ifcontinue(void);
void InsSort (Record r[],int n);
void ShellSort (Record[],int n);
void BubbleSort(Record r[],int n);
void QuickSort (Record r[],int s,int t);
int main(void)
...{
Record r[MAXN];
int n=10;
printf ("Show sorts by DaNmarner 2006.4 ");
printf ("How much record to be sorted ( n<100 ) ?");
scanf ("%d",&n);
puts("");
//演示插入排序
puts("InsSort ready! ");
ifcontinue();
Random(r,n);
puts("Before InsSort:");
printkeys(r,n);
InsSort(r,n);
puts("After InsSort:");
printkeys(r,n);
puts("");
//插入排序结束
//演示希尔排序
puts("ShellSort ready! ");
ifcontinue();
Random(r,n);
puts("Before ShellSort:");
printkeys(r,n);
ShellSort(r,n);
puts("After ShellSort:");
printkeys(r,n);
puts("");
//希尔排序结束
//演示冒泡排序
puts("BubbleSort ready! ");
ifcontinue();
Random(r,n);
puts("Before BubbleSort:");
printkeys(r,n);
BubbleSort(r,n);
puts("After BubbleSort:");
printkeys(r,n);
puts("");
//冒泡排序结束
//演示快速排序
puts("QuickSort ready! ");
ifcontinue();
Random(r,n);
puts("Before QuickSort:");
printkeys(r,n);
QuickSort(r,0,n-1);
puts("After QuickSort:");
printkeys(r,n);
puts("");
//演示快速结束
//演示堆排序
puts("HeapSort ready! ");
ifcontinue();
Random(r,n);
puts("Before HeapSort:");
printkeys(r,n);
QuickSort(r,0,n-1);
puts("After HeapSort:");
printkeys(r,n);
puts("");
//演示堆结束
system("PAUSE");
return 0;
}
/**//* printkeys.c: 输出排序关键字 */
#include "sort.h"
int printkeys (Record r[],int n)
...{
int i;
for (i=0;i<n;i++)
printf("%d ",r[i].key);
printf (" ");
return i;
}
/**//* ifcontinue.c: 控制是否继续演示 */
#include <stdio.h>
#include <stdlib.h>
int ifcontinue(void)
...{
int c;
puts("Press any key to continue, q to quit... ");
if ((c=getchar())=='q') exit(1);
}
/**//* random.c: 用随机数给r[0].key-r[n-1].key赋值 */
#include <stdlib.h>
#include <time.h>
#include "sort.h"
int Random (Record r[],int n)
...{
int i;
srand(time(NULL));
for (i=0;i<n;i++)
r[i].key=rand();
return n;
}
/**//* bubblesort.c: 演示冒泡排序 */
#include "sort.h"
void BubbleSort(Record r[],int n)
...{
int i,j,done=0;
Record tmp;
for (i=0; !done && i<n; i++)...{
done=1;
for (j=1;j<n-i;j++)
if (r[j-1].key>r[j].key)...{
tmp=r[j-1];
r[j-1]=r[j];
r[j]=tmp;
done=0;
}
}
}
/**//* quicksort.c 快速排序算法 */
#include "sort.h"
void QuickSort (Record r[],int s,int t)
...{
int low=s;
int high=t;
Record pivot;
pivot=r[s];
while (low<high)...{
while (low<high && r[high].key>pivot.key)
high--;
if (low<high) r[low++]=r[high];
while (low<high && r[low].key<pivot.key)
low++;
if (low<high) r[high--]=r[low];
}
r[low]=pivot;
if (s<low) QuickSort(r,s,low-1);
if (t>high) QuickSort(r,high+1,t);
}
/**//* inssort.c: 插入排序算法 */
#include "sort.h"
void InsSort (Record r[],int n)
...{
int i,j;
Record tmp;
for (i=1;i<n;i++) ...{
tmp=r[i];
for (j=i-1; j>=0 && tmp.key < r[j].key; j--)
r[j+1]=r[j];
r[j+1]=tmp;
}
}
/**//* shellsort.c: 希尔排序算法*/
#include "sort.h"
void ShellSort (Record r[],int n)
...{
int i,j,dk=n/2;
Record tmp;
while (dk > 0) ...{
for (i=dk;i<n;i++) ...{
tmp=r[i];
for (j=i-dk;j>=0 && tmp.key<r[j].key;j-=dk)
r[j+dk]=r[j];
r[j+dk]=tmp;
}
dk/=2;
}
}
相关文章推荐
- 【郝斌数据结构自学笔记】26_通过链表排序算法的演示再次详细讨论到底什么是算法以及到底什么是泛型【重点】
- Canvas制作排序算法演示动画
- java基础—System类的方法演示
- java基础—Calendar类方法演示
- 排序算法的下界和如何超越下界(摘自算法基础)
- 算法基础_8大经典排序算法实现回顾
- 基础排序算法
- 排序算法,数组进阶及面向对象基础
- java基础之几种排序算法
- 排序算法的动画演示程序设计
- 一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-演示ORM中的查询
- JAVA基础学习之流的简述及演示案例、用缓冲区方法buffer读写文件、File类对象的使用、Serializable标记接口(6)
- 【小松教你手游开发】【面试必读(编程基础)】 八大排序算法
- 【计算机基础】 常用的排序算法的时间复杂度和空间复杂度
- 基础知识-排序算法
- 算法基础之三种排序算法
- 用Java实现几种常见的排序算法-Java基础-Java-编程开发
- 基础排序算法学习
- 【计算机基础】 经常使用的排序算法的时间复杂度和空间复杂度
- Java面试宝典系列之基础排序算法