歸併排序
1.左右兩邊先排序;
2.再借助輔助陣列,指標在左右兩個陣列中移動,兩指標作比較,小的就往輔助陣列中填;
3.整體在輔助陣列中有序後,拷貝回原陣列。
//歸併排序 時間複雜度o(n*logn)
var list =[5
,2,6
,1,22
,77,4
,12];
console.
log(
'未排序'
,list)
;function
merge
(arr,l,mid,r)
while
(p1 <= mid)
while
(p2 <= r)
for(i=
0; i
function
sortprocess
(arr,l,r)
var mid =
parseint
((l+r)/2
);sortprocess
(arr,l,mid)
;sortprocess
(arr,mid+
1,r)
;merge
(arr,l,mid,r);}
function
mergesort
(arr)
sortprocess
(arr,
0,arr.length-1)
;}mergesort
(list)
;console.
log(
'歸併排序'
,list)
;
除錯結果如下:
報錯總結:在沒有把mid取整時,出現了無限迴圈的情況
遞迴演算法:
系統中乙個函式調子過程之前,會將函式、引數…都壓入棧中,子過程返回之後,重新呼叫棧中函式,徹底還原。
( 自己呼叫自己 )
//遞迴找最大值
var nums =[4
,3,2
,1];
var len = nums.length;
function
getmax
(arr,l,r)
var mid =
parseint
((l+r)/2
);var maxleft =
getmax
(arr,l,mid)
;var maxright =
getmax
(arr,mid+
1,r)
;return math.
max(maxleft,maxright);}
console.
log(
getmax
(nums,
0,len-1)
);
除錯結果如下:
快速排序
1.每一趟排序都將資料分割兩部分,左邊小,右邊大;
2.按此方法對接著將左和右也遞迴切分;
3.以此達到整個資料變成有序序列
//快速排序 複雜度最壞為o(n^2)
var arr =[4
,9,11
,1,3
,5,88
,22,7
,2,5
];function
quicksort
(arr,l,r)
}function
partition
(arr,l,r)
else
if(arr[l]
> arr[r]
)else
}swap
(arr,more,r)
;return
newarray
(less+
1,more);}
function
swap
(arr,i,j)
quicksort
(arr,
0,arr.length-1)
;console.
log(
'快排'
,arr)
;
荷蘭國旗問題var arr1 =[4
,9,11
,1,3
,5,88
,22,7
,2];
var arr2 =[3
,1,2
,4];
var arr3 =[9
,11,55
,7];
function
partition
(arr,l,r,num)
else
if(arr[cur]
> num)
else
}return arr;
}function
swap
(arr,i,j)
console.
log(
'arr1'
,partition
(arr1,
0,arr1.length-1,
5));
console.
log(
'都小於num的arr2'
,partition
(arr2,
0,arr2.length-1,
5));
console.
log(
'都大於num的arr3'
,partition
(arr3,
0,arr3.length-1,
5));
3 排序演算法 歸併排序
問題描述 歸併排序演算法對下列例項排序,寫出基於歸併排序演算法對下面例項進行排序的具體過程。a 48,12,61,3,5,19,32,7 解題思想 將n個元素分成2個子集合,分別對子集合進行排序,最終將排好序的子集合合併為有序集合。n 1是中止。如下 include include using na...
演算法 1 排序 歸併排序
歸併排序思想 1.把長度為n的輸入序列分成兩個長度為n 2的子串行 2.對這兩個子串行分別採用歸併排序 3.將兩個排序好的子串行合併成乙個最終的排序序列。小結 平均時間複雜度o nlogn 最好情況o nlogn 最壞情況o nlogn 空間複雜度o n 占用額外記憶體 穩定性 穩定 歸併排序入口 ...
19 排序 歸併排序
將已有序的子串行合併,得到有完全有序的序列 leftstart 左邊陣列的起始位置,rightstart 右邊陣列的起始位置,rightend 右邊陣列的結束位置 void merge elementtype a,elementtype tmpa,int leftstart,int rightsta...