排序演算法 插入排序和選擇排序

2021-08-16 17:50:51 字數 1525 閱讀 1782

二者演算法分析

穩定性

時間複雜度

希爾排序

希爾排序是直接插入排序的優化,但當待排序數列很大時,預排序過程效率會降低許多,時間複雜度為o(n2n2

空間複雜度

空間複雜度都為o(1),在進行排序時,會建立臨時常數個臨時變數用於控制下標

**:

/*****************直接插入排序************/

void insertsort(datatype* a, size_t n)

}}/**********希爾排序******************/

void shellsort(datatype* a, size_t n)

}gap = gap / 3 + 1;

}insertsort(a, n);

}

每遍歷一次待排序序列,選出最大和最小的數,分別放在左邊和右邊的相應位置上,直到全部選出為止(如下圖)

二者演算法分析

穩定性

時間複雜度

堆排序

綜上,堆排序的時間複雜度為o(n*logn)

空間複雜度

**

/*******************選擇排序*************/

void selectsort(datatype* a, size_t n)

if (a[max] < a[i])

}//進行交換

swap(&a[left], &a[min]);

//當最大的數在最左邊,需將max的位置置為最小值

if (max == left)

swap(&a[right], &a[max]);

left++, right--;

}}/*****************堆排序****************/

void heapsort(datatype* a1, size_t n)

for (int j = n-1;j>0; --j)

}//向下調整

void adjustdown(datatype* a1, size_t n, size_t parent)

if (a[parent] < a[child])

else}}

選擇排序和插入排序

選擇排序 時間複雜度 o n 2 額外空間複雜度o 1 選擇排序是從陣列的第乙個值即arr 0 開始,先假定當前值為最小值,記下index值,向後遍歷陣列,當 arr i 小於arr index 時,令index i 一直到arr length 1 獲得最小值的index然後與arr 0 交換,此時...

插入排序和選擇排序

排序 將一組雜亂無章的資料按照一定的規則有組織地排列起來。排序的穩定性 如果在排序中,存在前後相同的兩個元素的話,排序前和排序後他們的相對位置不發生變化。今天,先來學習插入排序和選擇排序 插入排序 直接插入排序 1 思想 每一步將乙個待排序的元其排序碼的大小,插入到前面已將排好序的一組元素的合適位置...

插入排序和選擇排序

插入排序 插入排序的基本操作就是將乙個資料插入到已經排好序的有序資料中,從而得到乙個新的 個數加一的有序資料。從第乙個元素開始,該元素可以認為已經被排序 取出下乙個元素,在已經排序的元素序列中從後向前掃瞄 如果該元素 已排序 大於新元素,將該元素移到下一位置 重複步驟3,直到找到已排序的元素小於或者...