資料結構與演算法 排序一

2021-10-07 15:27:35 字數 3287 閱讀 3575

演算法的效率表示。

簡單排序(都以公升序為例)

氣泡排序,選擇排序

2,選擇排序法

3,插入排序

不同時間複雜度的排序,首先看時間複雜度;相同時間複雜度情況下,看比較次數。

效率,插入排序》選擇排序》氣泡排序;所有簡單排序都是穩定的。

高階排序

2,歸併排序

3,快速排序

//先封裝乙個列表封裝資料

function

arraylist()

arraylist.prototype.

tostring

=function()

arraylist.prototype.

swap

=function

(a, b)

//排序演算法,公升序

//簡單排序

//1,氣泡排序

arraylist.prototype.

bubblesort

=function()

}}return

this

//返回物件,以方便繼續呼叫物件方法

}//2,選擇排序

arraylist.prototype.

selectionsort

=function()

}this

.swap

(i, min)

//真實最小值下標,找到才交換,所以交換次數減少

}return

this

}//3,插入排序

arraylist.prototype.

insertionsort

=function()

//把temp插入到正確位置

this

.array[j]

= temp

}return

this

}//高階排序

//1,希爾排序

arraylist.prototype.

shellsort

=function()

this

.array[j]

= temp

}gap = math.

floor

(gap /2)

}return

this

}//2,歸併排序

arraylist.prototype.

mergesort

=function()

//拆分,遞迴實現,拆分不時間產生零時陣列,只是計算好位置

arraylist.prototype.

split

=function

(left, right)

//合併

arraylist.prototype.

merge

=function

(left, center, right)

else

this

.array[k]

= arr1[i]

< arr2[j]

? arr1[i++

]: arr2[j++

]//合併判斷賦值和變數累加

}return

this

}//3,快速排序

// 選擇樞紐

arraylist.prototype.

pivot

=function

(left, right)if(

this

.array[center]

>

this

.array[right])if

(this

.array[left]

>

this

.array[center]

)// 3.將center移動到right - 1的位置;這樣比較操作可以減少乙個

this

.swap

(center, right -1)

// 4.返回pivot

return

this

.array[right -1]

//後面要以這個值為基準進行比較。

} arraylist.prototype.

quicksort

=function()

arraylist.prototype.

quicksortrec

=function

(left, right)

while

(this

.array[j]

> pivot)

if(i < j)

else

}//3,遞迴呼叫

//這裡時i-1與i取決於i和j的初始值的設定;如果設定是j=right-1,那麼右區間的就是從i+開始

this

.quicksortrec

(left, i-1)

//左邊設定完畢

return

this

.quicksortrec

(i, right)

//右邊也設定完畢,返回該物件}}

let list =

newarraylist()

list.

insert(66

) list.

insert(88

) list.

insert(12

) list.

insert(87

) list.

insert

(100

) list.

insert(5

) list.

insert

(566

) list.

insert(23

) list.

insert(99

)//所有方法均返回設定好的物件,以便於統一呼叫tostring方法以供展示

console.

log(list.

tostring()

)//66-88-12-87-100-566-23

氣泡排序12-23-66-87-88-99-100-566

選擇排序

插入排序

希爾排序

歸併排序

console.

log(list.

quicksort()

.tostring()

)//快速排序

資料結構與演算法 排序 一

每次比較兩個相鄰的元素,如果它們的順序錯誤就把它們交換過來。核心是雙重巢狀迴圈,時間複雜度是o n n 簡單選擇排序就是通過n i次關鍵字的比較,從n i 1個記錄中選出關鍵字最小的記錄,並和第i 1 i n 個記錄交換。演算法的時間複雜度是o n n 但是交換移動資料次數比較小,效能優於氣泡排序。...

演算法與資料結構(一) 快速排序

原理 在序列中找乙個基準數,然後,通過一定的次序調整 如交換位置或不斷填坑的方式 使得這個基準數的位置前面的數都小於基準數,後面的數都大於這個基準數,那麼,就找到了這個基準數的位置,然後,不斷地遞迴這個過程。演算法步驟 1.找乙個基準數,一般為待排序序列左邊的第乙個,並且把這個位置作為第乙個坑,並儲...

演算法與資料結構之排序一

1 選擇排序 2 插入排序 3 氣泡排序 4 希爾排序 插入排序的改進 一 選擇排序 def selectionsort arr for i in range len arr minindex i for j in range i,len arr if arr j arr minindex mini...