一、實驗目的和要求
1、掌握各種內排序演算法的實現方法;
2、學會分析各種內排序演算法的時間複雜度;
二、實驗環境
軟體:dev-c++
三、實驗原理及內容
#include
#include
#include
#define maxsize 100000
//const int maxsize=100000;
#define false 0
#define true 1
typedef int keytype;
typedef int datatype;
typedef int status;
typedef int bool;
typedef struct entry//資料元素
entry;
typedef struct list//順序表
list;
typedef struct maxheap//
maxheap;
status init(list *list)
//printf("\n");
}status init(maxheap *heap)
//printf("\n");
}status output(list list)
printf("\n");
return 1;
}status output(maxheap heap)
printf("\n");
return 1;
}int findmin(list list,int startindex)
}return minindex;
} void swap(entry *d,int i,int j)
void selectsort(list *list)
}void insertsort(list *list)
list->d[j+1]=insertitem;//
//printf("第%d次: ",i);
//output(*list); }}
void bubblesort(list *list)
}if(isswap==0) break;//???
//else
// }
}int partition(list *list,int low,int high)
while(iswap(list->d,low,j);
return j;
}void quicksort(list *list,int low,int high)
}void quicksort(list *list)
void merge(list *list,entry *temp,int low,int n1,int n2)
else
}while(i<=low+n1-1)
while(j<=low+n1+n2-1)
//for(i=0;i
}void mergesort(list *list)
else
merge(list,temp,low,n1,n2);
low+=n1+n2;
}//for(i=0;in;i++)
//size*=2;}}
void adjustdown(entry *heap,int s,int m)
heap[s]=temp;
}void heapsort(maxheap *heap)
}void rand(list *list)
printf("\n");
}void rand(maxheap *heap)
printf("\n");
}int main()
{int a[6],b[6],c[6];
list l;
maxheap h;
init(&l);
init(&h);
rand(&l);
//output(l);
a[0]=clock();
selectsort(&l);
b[0]=clock();//到這結束
c[0]=b[0]-a[0];//算出來的單位是毫秒
printf("最終 : ");
output(l);
//printf("時間 : %dms\n",c[0]);
rand(&l);
a[1]=clock();
insertsort(&l);
b[1]=clock();//到這結束
c[1]=b[1]-a[1];//算出來的單位是毫秒
printf("最終 : ");
output(l);
//printf("時間 : %dms\n",c[1]);
rand(&l);
a[2]=clock();
bubblesort(&l);
b[2]=clock();//到這結束
c[2]=b[2]-a[2];//算出來的單位是毫秒
printf("最終 : ");
output(l);
//printf("時間 : %dms\n",c[2]);
rand(&l);
a[3]=clock();
quicksort(&l);
b[3]=clock();//到這結束
c[3]=b[3]-a[3];//算出來的單位是毫秒
printf("最終 : ");
output(l);
//printf("時間 : %dms\n",c[3]);
rand(&l);
a[4]=clock();
mergesort(&l);
b[4]=clock();//到這結束
c[4]=b[4]-a[4];//算出來的單位是毫秒
printf("最終 : ");
output(l);
//printf("時間 : %dms\n",c[4]);
rand(&h);
a[5]=clock();
heapsort(&h);
b[5]=clock();//到這結束
c[5]=b[5]-a[5];//算出來的單位是毫秒
printf("最終 : ");
output(h);
//printf("時間 : %dms\n",c[5]);
printf("\n");
printf("時間 : %dms\n",c[0]);
printf("時間 : %dms\n",c[1]);
printf("時間 : %dms\n",c[2]);
printf("時間 : %dms\n",c[3]);
printf("時間 : %dms\n",c[4]);
printf("時間 : %dms\n",c[5]);
return 0;
四、實驗總結
當排序資料十分大時,會導致棧空間不足導致爆棧而報錯;
解決方法:在dev-c++中選單中找到「編譯選項」把「-wl,-stack,10000000000」貼到「編譯時輸入一下命令」;
資料結構筆記 排序綜合
今天是2019.12.14,今天突然想到把這個排序演算法寫好,這是我寫的第一篇部落格,以便自己以後複習 塊const int maxn 20000 int a maxn 選擇排序void selection sort 氣泡排序void bubble sort 插入排序void insert sort...
資料結構 綜合
在asc演算法team日常開發中,常常面臨一些資料結構的抉擇,令人糾結。目前大家在策劃乙個fbi專案 fast binary indexing 其中用到的詞彙有6200條,詞彙長度在10 15之間,詞彙字元是英文本母,區分大小寫。請在下面幾個資料結構中選擇乙個使檢索速度最快的 二叉搜尋樹,比較函式開...
快速排序 C語言資料結構
include include void swap int p1,int p2 void quick sort int a,int left,int right 函式功能 使用快速排序法進行排序 從小到大 函式原型 void quick sort int a,int left,int right 函...