C++拔出排序算法實例。本站提示廣大學習愛好者:(C++拔出排序算法實例)文章只能為提供參考,不一定能成為您想要的結果。以下是C++拔出排序算法實例正文
拔出排序
沒事愛好看看數據構造和算法,增長本身對數據構造和算法的熟悉,同時也增長本身的編程根本功。拔出排序是排序中比擬罕見的一種,懂得起來異常簡略。如今好比有以下數據須要停止排序:
10 3 8 0 6 9 2
當應用拔出排序停止升序排序時,排序的步調是如許的:
10 3 8 0 6 9 2 // 取元素3,去和10停止比較
3 10 8 0 6 9 2 // 因為10比3年夜,將10向後挪動,將3放置在本來10的地位;再取8與前一個元素10停止比較
3 8 10 0 6 9 2 // 同理挪動10;然後8再和3比,8年夜於3,所以不再挪動;如斯反復下去
……
0 2 3 6 8 9 10
也就是說,我們每次取一個元素,都要將該元素與之前曾經排序好的元素停止比擬。
拔出排序的最差時光龐雜度為O(n^2)。同時,該算法不須要開拓額定的空間,都是在原空間長進行挪動操作。
代碼完成
#include <iostream>
using namespace std;
void InsertSort(int arr[], int length)
{
int temp;
for (int i = 1; i < length; ++i) // 從數組中的第二個元素開端
{
temp = arr[i]; // 記載以後的元素
int j = i - 1;
while (j >= 0 && temp < arr[j]) // 將以後元素與之前的曾經排序好的序列元素停止挨個比擬
{
arr[j + 1] = arr[j]; // 曾經排序好的序列全體向後挪動
--j;
}
arr[j + 1] = temp; // 拔出以後的元素
}
}
int main()
{
int arr[10] = {9, 2, 8, 2, 3, 2, 4, 10, 34, 5};
InsertSort(arr, 10);
for (int i = 0; i < 10; ++i)
{
cout<<arr[i]<<" ";
}
cout<<endl;
return 0;
}