七大排序分類:
插入排序:直接插入排序(穩定) --> 希爾排序(不穩定);
選擇排序:簡單選擇排序(穩定) --> 堆排序(不穩定);
交換排序:氣泡排序(穩定) --> 快速排序(不穩定);
歸併排序。
直接插入排序
時間複雜度 : o(n^2)
演算法穩定性:穩定
void straightinsertsort (int a,int n)
}}
氣泡排序
時間複雜度:o(n^2)
演算法穩定性:穩定
1)比較相鄰的兩個元素,如果前面的資料大於後面的資料,就將兩個資料交換;這樣對陣列第0個元素到第 n-1 個元素進行一次遍歷後,最大的乙個元素就沉到陣列的第 n-1 個位置;
2)重複步驟1)直到 i = n - 1;
void bubblesort(int p,int len)
} }}
簡單選擇排序
時間複雜度:o(n^2)
演算法穩定性:穩定
void selectsort(int p,int len)
if(minindex != i)
}}
希爾排序
時間複雜度:o(nlogn )~o(n^2)
演算法穩定性: 不穩定
void shellsort(int p,int len)
p[j + inc] = tmp;
}} }
}
歸併排序
時間複雜度:o(nlogn)
演算法穩定性:穩定
//將有二個有序數列a[first...mid]和a[mid...last]合併。
void mergearray(int a, int first, int mid, int last, int temp)
while (i <= m)
temp[k++] = a[i++];
while (j <= n)
temp[k++] = a[j++];
for (i = 0; i < k; i++)
a[first + i] = temp[i];
}void mergesort(int a, int first, int last, int temp)
}boolean mergesort(int a, int n)
快速排序
時間複雜度:o(nlogn)~o(n^2)
演算法穩定性:不穩定
void quicksort(int list,int low,int high)
}int partition(int list,int low,int high)
list[low] = pivot;
return low;
}
基數排序
int radixsort(int nums)
while(maxvalue / exp > 0)
for(int i = 1; i < base; i ++)
for(int i = len - 1; i >= 0; i --)
for(int i = 0; i < len; i ++)
exp *= base;
} return nums;
}
七大排序演算法
氣泡排序 void bubble int a,int n 選擇排序 void select sort int a,int n n為陣列a的元素個數 將第i 小的數,放在第i 個位置 如果剛好,就不用交換 if i min index 插入排序 typedef int elementtype void...
七大排序演算法
首先回顧下各種排序的主要思路 一 氣泡排序 氣泡排序主要思路是 通過交換使相鄰的兩個數變成小數在前大數在後,這樣每次遍歷後,最大的數就 沉 到最後面了。重複n次即可以使陣列有序。氣泡排序改進1 在某次遍歷中如果沒有資料交換,說明整個陣列已經有序。因此通過設定標誌位來記錄此次遍歷有無資料交換就可以判斷...
七大排序演算法
基本思想設要排序的陣列是a 0 a n 1 首先任意選取乙個資料 通常選用陣列的第乙個數 作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序 時空複雜度快速排序的最壞時間為o n 2 平均時間複雜度為o nlgn 在初始陣列近乎有序的狀態下最耗時 快...