常用的內部排序演算法

2021-09-26 07:49:51 字數 1941 閱讀 6424

通過乙個簡單的選單,分別實現下列排序要求,採用幾組不同資料測試各排序演算法的效能(比較次數和移動次數)及穩定性。

​ 實現簡單選擇排序、直接插入排序和氣泡排序;

​ 實現折半插入排序;

​ 實現希爾排序演算法;

​ 實現快速排序演算法(遞迴和非遞迴);

​ 實現堆排序演算法。

(1)輸入:

​ 根據選單提示選擇排序演算法,輸入一組待排序資料。

(2)輸出:

​ 輸出排序結果(體現排序過程),及排序過程中資料的比較次數和移動

測試資料

直接插入排序

50 23 6 71 90 33 99 45

折半插入排序

33 99 45 4 99 2 50 13

希爾排序

6 71 50 66 12 9 67 43

簡單選擇排序

3 99 45 23 60 47 91 7

氣泡排序

6 71 51 88 19 45 37 51

快速排序

50 23 6 55 60 57 91 66

堆排序5 33 73 91 20 87 93 91

主要資料型別與變數

typedef int keytype;

typedef structredtype;

//順序表型別

typedef structsqlist;

部分函式模組

void insersort(sqlist &l)

l.r[j+1] = l.r[0];

printlist_sq(l);

} m++;

} printf("比較次數為:%d\n", m);

printf("移動次數為:%d\n", n);

} void binsertsort(sqlist &l)

for(j=i-1; j>=high+1; --j)

l.r[high+1] = l.r[0];

b++;

printlist_sq(l);

} a++;

printf("比較次數為:%d\n", a);

printf("移動次數為:%d\n", b);

}void shellinsert(sqlist &l, int dk, sqlist &h)

l.r[j+dk] = l.r[0];

n++;

m++;

} printlist_sq(l);

h.length += m;

h.r[0].key += n;

}void shellsort(sqlist &l)

printf("比較次數為:%d\n", h.length);

printf("移動次數為:%d\n", h.r[0].key);

}status selectminkey(sqlist l, int i)

m++;

} printlist_sq(l);

printf("比較次數為:%d\n", m);

printf("移動次數為:%d\n", n);

}

}void qsort(sqlist &l, int low, int high, sqlist &h)

}status partition(sqlist &l, int low, int high, sqlist &h)

l.r[low] = l.r[high]; n++;

while(low0; --i)

heapadjust(h, i, h.length, l);

for(i = h.length; i>1; --i)

printf("比較次數為:%d\n", h.length);

printf("移動次數為:%d\n", h.r[0].key);

}

若干常用(內部)排序演算法的總結

實現 中會出現巨集 typedef int datatype define swap a,b 1.插入排序演算法 類似數學歸納法的描述 起始時a beg 的元素位置不變 此時a beg 這乙個元素已經有序 假設a beg a i beg i end 1 已經排好序,對a i 1 a end 依次將a...

內部排序演算法

內部排序是指待排序列完全存放在記憶體中所進行的排序過程,適合不太大的元素序列。1.快速排序int partition int a,int low,int high a low a high while low2.並歸排序 void merging int list1,int list1 size,i...

內部排序演算法

內部排序演算法就是指記憶體中的排序演算法,而外部排序演算法則是指待排序資料過多,無法一次性載入到記憶體中,排序過程需要讀取磁碟,因此需要考慮磁碟 io 的消耗!內部排序演算法按照操作型別可大致分為五類 插入排序 交換排序 選擇排序 歸併排序 計數排序 內部排序演算法按照時間複雜度可大致分為三類 簡單...