C语言排序实验代码
1.核心数据结构:
自定义数据类型:数组
如何定义:int a[ ]
结构示意图:
2.程序框架结构与流程图:
程序框架结构:
流程图:
3.细节设计
(1)直接插入排序:
实现的功能:利用直接插入排序的算法将数组有序化。
(2)冒泡排序:
实现的功能:最多N趟排序后,将数组有序化。
(3)简单选择排序:
实现的功能:利用选取剩余数中最大或最小的元素,最多经历n趟后,将数组有序化。(4)快速排序:
实现的功能:利用两个下标i,j将每个元素放在正确的位置,实现数组的有序化。
(5)大根堆的调整算法:
实现的功能:将一个堆调整为大根堆。
(6)堆排序:
实现的功能:在大根堆调整排序算法的基础上,经历掐尖和重新建立大根堆后,使数组有序化。
四、程序源代码
#include
int readdata(int a[]){
FILE *fp;
int n,i;
fp = fopen("data.txt","r");
fscanf(fp,"%d",&n);
for(i = 1;i <= n; i++){
fscanf(fp,"%d",a+i);
}
return n;
}
void Insert_Sort(int a[], int count){//直接插入排序
{ int i, j ;
for (i=2; i<=L->length; i++)
{ L->R[0]=L->R[i]; j=i-1;
while( LT(L->R[0].key, L->R[j].key) )
{ L->R[j+1]=L->R[j];
j--;
} L->R[j+1]=L->R[0];
}
}
}
void Bubble_Sort(int a[], int count){//冒泡排序
{ int j ,k , flag ;
for (j=0; j
{ flag=TRUE ;
for (k=1; k<=L->length-j; k++)
if (LT(L->R[k+1].key, L->R[k].key ) )
{ flag=FALSE ; L->R[0]=L->R[k] ;
L->R[k]=L->R[k+1] ;
L->R[k+1]=L->R[0] ;
}
if (flag==TRUE) break ;
}
}
}
void Select_Sort(int a[], int count){//简单选择排序
{ int m, n , k;
for (m=1; m
{ k=m ;
for (n=m+1; n<=L->length; n++)
if ( LT(L->R[n].key, L->R[k].key) ) k=n ;
if (k!=m) /* 记录交换*/
{ L->R[0]=L->R[m]; L->R[m]=L->R[k];
L->R[k]=L->R[0];
}
}
}
}
int Quick_Sort_OnePass(int a[], int start, int end){
}
void Quick_Sort(int a[], int start, int end){//快速排序
{ int k ;
if (low { k=quick_one_pass(L, low, high); quick_Sort(L, low, k-1); quick_Sort(L, k+1, high); } /* 序列分为两部分后分别对每个子序列排序*/ } } void Heap_Modify_Max(int a[], int root, int n){//大根堆调整算法{ int j=s, k=2*j ; H->R[0]=H->R[j] ; for (k=2*j; k<=m; k=2*k) { if ((k if ( LT(H->R[k].key, H->R[0].key) ) { H->R[j]=H->R[k] ; j=k ; k=2*j } else break ; } } void Heap_Sort(int a[], int n){//堆排序 { int j ; for (j=H->length/2; j>0; j--) Heap_adjust(H, j , H->length) ; } for (j=H->length/2; j>=1; j--) { H->R[0]=H->R[1] ; H->R[1]=H->R[j] ; H->R[j]=H->R[0] ; Heap_adjust(H, 1, j-1) ; } } int main(){ int a[10],i, count; count = readdata(a); printf("原始数据:"); for(i = 1;i <= count; i++){ printf("%5d",a[i]); } Bubble_Sort(a, count); printf("\n冒泡排序结果:"); for(i = 1;i <= count; i++){ printf("%5d",a[i]); } count = readdata(a); Insert_Sort(a, count); printf("\n插入排序结果:"); for(i = 1;i <= count; i++){ printf("%5d",a[i]); } count = readdata(a); Select_Sort(a, count); printf("\n简单选择排序:"); for(i = 1;i <= count; i++){ printf("%5d",a[i]); } count = readdata(a); Quick_Sort(a, 1, count); printf("\n快速排序结果:"); for(i = 1;i <= count; i++){ printf("%5d",a[i]); } count = readdata(a); Heap_Sort(a, count); printf("\n堆排序结果:"); for(i = 1;i <= count; i++){ printf("%5d",a[i]); } printf("\n"); return 0; }