Comparison of the efficiency of several sort algorithms

xiaoxiao2021-03-06  15

, L-> record [i] .num); fclose (f);} / **************************** / VOID ShellInsert (Linklist) * L, INT DK, INT * CMPNUM, INT * chGNUM) {INT I, J; Data Temp; for (i = DK; i length; i ) {IF (LT (LT (L-> Record [i] .num, l-> record [i-dk] .num, cmpnum)) {Memcpy (& Temp, & l-> Record [i], sizeof (data)); for (j = i-dk; j> = 0 && LT (Temp.Num, L-> Record [J] .NUM, CMPNUM); J- = DK) {(* chgnum) ; Memcpy (& L-> Record [J DK], & l-> Record [J ], SizeOf (DATA));} Memcpy (& L-> Record [J DK], & Temp, Sizeof (Data));}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} voidsort , Int * chGNUM) {INT K; for (k = 0; k record [low ], SizeOf (data)); pivotkey = l-> record [low] .num; while (low = pivotkey) {high-- ; (* Cmpnum) ;} (* chgnum) ; M EMCPY (& l-> Record [Low], & L-> Record [High], Sizeof (Data)); While (Low record [low] .num <= pivotkey) {low ; (* cmpnum) ;} (* chGNUM) ; memcpy (& l-> record [high], & l-> record [low], sizeof (data)); ... Memcpy (& l-> record [low], & temp, sizeof DATA)); RETURN Low;} Void Qsort (Linklist * L, INT Low, Int High, Int * Cmpnum, INT * chGNUM) {INT Pivotloc = 0; if (Low

QSort (L, PivotLoc 1, High, Cmpnum, Chgnum);}} void Quicksort (Linklist * L, INT * CMPNUM, INT * chGNUM) {qsort (l, 0, l-> length-1, cmpnum, chgnum) } / **************************************************** / / *********** Pile Sort ************************************************* / VOID Heapadjust (Linklist * L, INT s, int * chgnum) {data temp; int J = 0; s ; Memcpy (& Temp, & l-> Record [S-1], SIZEOF (DATA)); for (j = 2 * S; j <= m; j * = 2) {IF (j record [j-1] .num, l-> record [j] .num, cmpnum)) J; IF (! lt (Temp.num, L-> Record [J-1] .num, cmpnum)) Break; (* chgnum) ; Memcpy (& L-> Record [S-1], & l-> Record [ J-1], sizeof (data)); s = j;} Memcpy (& l-> record [S-1], & temp, sizeof (data));} void Heapsort (Linklist * L, Int * Cmpnum, int * CHGNUM) {INT i = 0; DATA TEMP; for (i = l-> length / 2-1; i> = 0; I -) Heapadjust (L, I, L-> Length, Cmpnum, Chgnum); for (i = l-> length; i> 1; I -) {Memcpy (& Temp, & l-> record [0], sizeof (data)); (* chgnum) ; memcpy (& l-> record [0 ], & L-> Record [I-1], SizeOf (Data)); Memcpy (& L-> Record [I-1], & Temp, SizeOf (Data)); Heapadjust (L, 0, I-1, Cmpnum Chgnum);}} / *************** Bubbling Sort *********************************** **** / void bubblesort (LinkList * L, INT * Cmpnum, INT * chGNUM) {INT I, J; DATA TEMP; For (i = 0; I record [j] .num, l-> record [j 1] .num, cmpnum) {(* chgnum) ; memcpy (& Temp, & l-> Record [J], SIZEOF (DATA)); Memcpy (& L-> Record [J], & L-> Record [J 1], SizeOf (Data)); Memcpy (& l-> Record J 1], & Temp, Sizeof (DATA));

}}}} / ********************************************************************** ************ / / **************** Select sort ************** ***************** / INT SELECTMINKEY (Linklist * L, INT K, INT * CMPNUM) {INT min = k; for (; k length; k ) {If (! Lt (l-> record [min] .num, l-> record [k] .num, cmpnum)) MIN = K;} return;} void selsort (Linklist * l, int * cmpnum, int * cmpnum, int * * Chgnum) {INT I, J; DATA TEMP; for (i = 0; i length; i ) {j = selectminkey (L, I, cmpnum); if (i! = J) {(* chgnum ; Memcpy (& Temp, & L-> Record [i], sizeof (data)); Memcpy (& l-> Record [i], & l-> record [j], sizeof (data)); Memcpy (& l- > Record [J], & Temp, SizeOf (Data));}}} / ****************************************** *************************************** / VOID SELECTSORT () {Printf ("/ n 0. INSERTSORT."); Printf "/ n 1. shellsort."); Printf ("/ n 2. Quicksort."); Printf ("/ n 3. Heapsort."); Printf ("/ n 4. bubblesort."); printf ("/ N 5. SelectSort. "); Printf (" / n 6. Allabove. "); Printf (" / N / T / T / T / T Please SELECT NUM: ");} / ******** *************************************** *************************************************************************************************************************** ************************************* / VOID ALLABOVE (LinkList * L, INT * CMPNUM, INT * chGNUM) {Int Temptime, i; INT SPENDTIME; INT DLTA [3] = {7, 3, 1}; int Indata [1] = {1}; temptime = (int) gettickcount (); shellsort (l, indata, 1, & cmpnum [0], & chgnum [0]); spendtime = (int) gettickcount () - Temptime; Printf ("/ n / tinsert:"); Printf ("/ n / tcompare number =% D / tchange number =% d / tsepndtime =% DMS" , Cmpnum [0], chgnum [0], spendtime); for (i = 0; i

Record [i] .num = randarray [i]; // Random Digital Reset Temptime = (int) gettickcount (); shellsort (L, DLTA, 3, & Cmpnum [1], & chGNUM [1]); spendtime = (int) Gettickcount () - Temptime; Printf ("/ n / tshellsort:"); printf ("/ n / tcompare number =% d / tchange number =% d / tsepndtime =% dms", cmpnum [1], chgnum [1] , Spendtime); for (i = 0; i record [i] .num = randarray [i]; // Random Digital Reset Temptime = (int) gettickcount (); Quicksort (l, & cmpnum [2], & chgnum [2]); spendtime = (int) gettickcount () - Temptime; Printf ("/ n / tquicksort:"); printf ("/ n / tcompare number =% d / tchange number =% D / TSEPNDTIME =% DMS ", cmpnum [2], chgnum [2], spendtime); for (i = 0; i record [i] .num = randarray [i]; // Random number Reset Temptime = (int) gettickcount (); Heapsort (L, & Cmpnum [3], & chGNUM [3]); spendtime = (int) gettickcount () - Temptime; Printf ("/ n / theapsort:"); printf (" / n / tcompare number =% d / tchange number =% d / tsepndtime =% DMS ", cmpnum [3], chgnum [3], spendtime); for (i = 0; i Record [i] .num = randaRray [i]; // Random Digital Reset Temptime = (in T) GetTickCount (); bubblesort (l, & cmpnum [4], & chgnum [4]); spendtime = (int) gettickcount () - temptime; printf ("/ n / tbubblesort:"); printf ("/ n / tcompare Number =% d / tchange number =% d / tsepndtime =% DMS ", cmpnum [4], chgnum [4], spendtime); for (i = 0; i Record [i]. Num = randarray [i]; // Random Digital Reset Temptime = (int) gettickcount (); Selsort (L, & Cmpnum [5], & chgnum [5]); spendtime = (int) gettickcount () - Temptime; Printf (" / N / TSELECTSORT: "); Printf ("

/ n / tcompare number =% d / tchange number =% d / tsepndtime =% DMS ", cmpnum [5], chgnum [5], spendtime);} void main () {intate = 0; int DLTA [3] = {7, 3, 1}; int Indata [1] = {1}; int Cmpnum [6], chgnum [6]; int spendtime = 0; int Temptime; LinkList L; InitLinkList (& l); MEMSET (Cmpnum, 0, SIZEOF (Cmpnum)); MEMSET (chGNUM, 0, SIZEOF (ChGNUM); banner (); selectsort (); scanf ("% d", & select); switch (select) {cas 0: temptime = (int Gettickcount (); shellsort (& l, indata, 1, & cmpnum [select], & chgnum [select]); spendtime = (int) gettickcount () - Temptime; Printf ("/ tinsert:"); printf ("/ n / N / tCompare Number =% D / Tchange Number =% D / TsepndTime =% DMS ", cmpnum [select], chgnum [select], spendtime); Break; case 1: temptime = (int) gettickcount (); shellsort (& l , DLTA, 3, & Cmpnum [SELECT], & chGNUM [SELECT]); spendtime = (int) gettickcount () - temptime; printf ("/ tshellsort:"); printf ("/ n / n / tcompare number =% D / Tchange Number =% D / TsepndTime =% DMS ", cmpnum [select], chgnum [select], spendtime; break; casse 2: Temptime = (int) gettickcount (); Quicksort (& l, & cmpnum [select), & chgnum [select]); spendtime = (int) gettickcount () - Temptime; Printf ("/ tquicksort:"); printf ("/ n / N / tCompare Number =% D / TCHANGE NUMBER =% D / TsepndTime =% DMS ", cmpnum [select], chgnum [select], spendtime); break; case 3: temptime = (int) gettickcount (); Heapsort (& l , & Cmpnum [select], & chgnum [select]); spendtime = (int) gettickcount () - Temptime; Printf ("/ theapsort:"); Printf ("/ n / n / tcompare number =

转载请注明原文地址:https://www.9cbs.com/read-50237.html

New Post(0)