排序演算法(三)簡單選擇排序和直接插入排序

2021-09-22 18:55:32 字數 1021 閱讀 8284

選擇排序的基本思想是每一趟在n-i+1(i=1,2,...,n-1)個記錄中選取關鍵字最小的記錄作為有序序列的第i個記錄。

簡單選擇排序法(****** selection sort)就是通過n-i次關鍵字間的比較,從n-i+1個記錄中選出關鍵字最小的記錄,並和第i(1≤i≤n)個記錄交換之。

/* 對順序表l作簡單選擇排序 */

void selectsort(sqlist *l)

/* 若min不等於i,說明找到最小值,交換 */

if (i != min)

/* 交換l->r[i]與l->r[min]的值 */

swap(l, i, min); }}

直接插入排序基本思想是每一步將乙個待排序的記錄,插入到前面已經排好序的有序序列中去,直到插完所有元素為止。

/* 對順序表l作直接插入排序 */

void insertsort(sqlist *l)}}

當最好的情況,也就是要排序的表本身就是有序的,比如紙牌拿到後就是,那麼我們比較次數,其實就是**第6行每個l.r[i]與l.r[i-1]的比較,共比較了(n-1)sigma(i=2, n, 1)次,由於每次都是l.r[i]>l.r[i-1],因此沒有移動的記錄,時間複雜度為o(n)。

當最壞的情況,即待排序表是逆序的情況,比如,此時需要比較sigma(i=2, n, i)=2+3+...+n=(n+2)(n-1)/2次,而記錄的移動次數也達到最大值sigma(i=2, n, i+1)=(n+4)(n-1)/2次。

如果排序記錄是隨機的,那麼根據概率相同的原則,平均比較和移動次數約為n2/4次。因此,我們得出直接插入排序法的時間複雜度為o(n2)。從這裡也看出,同樣的o(n2)時間複雜度,直接插入排序法比冒泡和簡單選擇排序的效能要好一些。

直接插入排序和簡單選擇排序

簡單選擇排序的思想 簡單選擇排序的基本思想是每一趟在 n i 1個記錄中選取關鍵字最小的記錄作為有序序列的第i個記錄 直接插入排序思想 基本操作是將乙個記錄插入到已經排好序的有序表中,從而得到乙個新的,記錄加1的有序表。兩者都是第二for迴圈都是不斷查詢,乙個是不斷往後找,乙個在當前i,不斷往前找。...

排序演算法 簡單選擇,冒泡和直接插入

排序演算法 簡單選擇,冒泡和直接插入 較好的一些鏈結 選擇 冒泡和直接插入 選擇排序 一 選擇排序 1 在待排序序列中,找到第乙個最大 最小 元素,存放在排序序列的起始位置 2 在剩餘未排序的元素中,繼續尋找最大 最小 元素,然後放到已經排序的序列的第二個位置 3 以此類推。時間複雜度為n的平方 t...

簡單選擇排序 直接選擇排序

簡單選擇排序也叫作直接選擇排序 每一趟在後面n i 1個中選出關鍵字最小的記錄,作為有序序列的第i個記錄 1 設待排序的記錄存放在陣列r 1 n 中,第一趟從r 1 開始,通過n 1次比較,從n個記錄中選出關鍵字最小的記錄,記為r k 交換r 1 和r k 2 第二趟從r 2 開始,通過n 2次比較...