您的位置:首页 > 其它

基础排序算法演示

2006-04-25 23:42 267 查看
满脑子都是阶段/状态/决策……学无止境呀

发一点基本的排序算法,分成很多个文件写的,每个文件前面带了注释,一起发出来,结构如下:

基础排序算法文件结构

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;


}


}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: