常用排序演算法小結

2022-09-12 08:18:10 字數 2356 閱讀 3247

直接插入排序

其思想為:可以先取出第乙個作為有序區間,遍歷剩下的無序區間,找到待排序元素依次和有序區間比較插入,直到整個陣列排序完成,其時間複雜度為o(n^2),具體實現如下

#include void insert(int a, int n) 

for (i = 0; i < n; i++)

} int main (void) ;

insert(a, 6); //2, 3, 4, 5, 6, 7

}

直接選擇排序

其思想為:每次從無序區間中找到最小值和無序區間的第乙個值進行交換,遍歷整個無序區間,直到無序區間只剩乙個值(初始有序區間為空,無序區間為整個待排序陣列)

#include void select(int a, int n) 

}if (k - i)

} for (i = 0; i < n; i++)

} int main (void) ;

select(a, 6); //2, 3, 4, 5, 6, 7

}

氣泡排序

排序思想:經過n-1趟排序,每一趟找出最小值到冒泡最終的位置,其時間複雜度為o(n^2), 結束的標誌為某一趟未經過任何排序,則可認為排序完成

#include void babel(int a, int n) 

}}

for (i = 0; i < n; i++)

} int main(void) ;

babel(a, 6);

}

快速排序

排序思想:分治,使用遞迴將問題分解。取出第乙個元素作為基準元素(這裡取任何元素都可以,以第乙個元素為例,且為從小到大排序),從後往前尋找比基準元素小的元素排在左邊,從前往後尋找比基準元素大的元素排在右邊,左遞迴右遞迴,實現元素的排序。具體c**如下:

#include int my_sort(int a, int left, int right)  

for (; (i < j) && (a[i] < temp); i++); //找出比temp大的元素

if (i < j)

} a[i] = temp;

return i;

} void quick(int a, int left, int right) }

int main(void) ;

quick(a, 0, 9);

for (int i = 0; i < 8; i++)

return 0;

} //1, 2, 3, 4, 5, 6, 7, 8

當然,作為一名前端工程師(不知道夠格不,繼續努力好了),有必要用j**ascript語言來展示一下這個應用十分廣泛的排序方法,不關乎語言的不同,思想上是等同的,只是其中某些方法我們可以直接呼叫。當然,這也是我面試時被問到的,有必要總結一下。

var quicksort = function (arr) 

var left = ; //左邊的陣列

var right = ; //右邊的陣列

var index = math.floor(arr.length/2);

for (var i = 0, len = arr.length; i < len; i++) else

}} return quicksort(left).concat(arr[index], quicksort(right));

}; console.log(quicksort([5, 6, 2, 3, 4, 1, 7, 8]));

//1, 2, 3, 4, 5, 6, 7, 8

歸併排序

排序思想:依然是分治啦,結合我們的遞迴。這個排序方法我還回憶了半天,誰叫我好久都沒碰過c語言了勒。感覺主要的點在於對陣列的左右兩個區間合併過程。

#include //合併排序的過程,拆開看就是將兩個無序陣列合併成乙個公升序序列

void result(int a, int x, int y) else

} for (i = x; i < j; i++)

} void mergesort(int a, int x, int y)

} int main(void) ;

mergesort(a, 0, 9);

for (int i = 0; i < 9; i++)

//1, 2, 3, 4, 5, 6, 7, 8, 9

return 0;

}

暫時總結的排序方法就這幾個了,可能自己去畫圖,手動跟蹤執行會理解的更加深刻。

常用排序演算法小結

1,選擇排序 中心思想 從陣列第一位開始,當前位置與後面位置的數值進行比較,當後面位置數值比當前位置數值大時,兩者交換數值。需要進行比較次數 n n 1 2 int arr for int x 0 x arr y 特點 內迴圈一次,最值出現在最前端 2.氣泡排序 中心思想 從陣列第一位開始,當前位置...

排序演算法小結

1 快速排序 quicksort 快速排序是乙個就地排序,分而治之,大規模遞迴的演算法。從本質上來說,它是歸併排序的就地版本。快速排序可以由下面四步組成。1 如果不多於1個資料,直接返回。2 一般選擇序列最左邊的值作為支點資料。3 將序列分成2部分,一部分都大於支點資料,另外一部分都小於支點資料。4...

排序演算法小結

1 歸併排序 3.區別與聯絡 遞迴是從未知推到已知,相當於把未知的東西壓入棧,等到可以算出結果了,就一步一步出棧。迭代是從已知到未知,從已知的東西一步一步推至目標。遞迴與迭代就好像一對逆元。遞迴的 更加清晰,但開銷更大,也更容易出錯,除錯較困難 而迭代的 編寫更困難,但速度和開銷較小。4.空間占用 ...