功能要求:利用随机数产生N个随机整数,对产生的数用多种算法排序并将排序后的结果保存到不同的文件中。
1、起泡排序(优化后):起泡排序是一种稳定的交换排序,基本思想是将数据中相邻的数据两两比较,如果反序就交换,直到出现没有反序的记录为止。改进后通过设立标志位来判断相邻的数据是否已经有序,是则跳过,减少交换次数,挺高性能。如图1-1:
代码如下:
void bubbleSort(Sqlist L){
int i,j,Q=1;
int F = 1;
for(i = 1;i<n&&(F == 1);i++){
F=0;
for(j = n-1;j>= i;j--){
if(L[j].key > L[j+1].key){
swap(L,j,j+1);
F = 1;
}
}
}
}
数据量为30时测试结果:
2、快速排序:通过一趟排序将待排记录分割成独立的两部分,其中一部分比另一部分的记录的关键字小,然后分别对两部分进行继续排序,最终完成全部排序。
/*快速排序*/
int Partition(Sqlist L,int low,int high){
L[0] = L[low];
int pivotkey = L[low].key;
while(low<high){
while(low<high&&L[high].key >= pivotkey) --high;
L[low] = L[high];
while(low<high&&L[low].key <= pivotkey) ++low;
L[high] = L[low];
}
L[low] = L[0];
return low;
}
void Qsort(Sqlist L,int low,int high){
if(low < high){
int pivoloc = Partition(L,low,high);
Qsort(L,pivoloc+1,high);
Qsort(L,low,pivoloc-1);
}
}
void QuickSort(Sqlist L){
Qsort(L,1,n);
}
数据量为30时:
(第一次写,记录一下自己打的代码图片源于大话数据结构)
欢迎指正。。