時間複雜度為o(n*log(n))
比較規則:
每乙個i位置上的數和i+1位置上的數進行比較,如果i位置上的數比i+1位置上的數大,就交換他們的位置,直到遍歷完整個陣列,至此排完乙個數。然後對[0,i-1]位置上的數進行排序,重複此規則。
時間複雜度:o(n2)
**
排序思想:public
class
bubblesort
;bubblesort
(arr)
; system.out.
println
(arrays.
tostring
(arr));
}public
static
void
bubblesort
(int
arr)
for(
int end = arr.length -
1; end >
0; end --)}
}}public
static
void
swap
(int
arr,
int i,
int j)
}
先從[0,n-1]位置選擇乙個最小的數字,假設為0位置的數。遍歷[1,n-1]位置數,和0位置的數進行比較,將最小的數字放在0位置。再選擇1位置的數為最小的數字,和[2,n-1]位置進行比較,重複此過程直到[n-2,n-1]位置數
時間複雜度:o(n^2)
排序思想:public
class
selectsort
for(
int i =
0; i < arr.length -
1; i++
)swap
(arr,i,minindex);}
}public
static
void
swap
(int
arr,
int i,
int j)
}
假設已經有了n個有序數字,現在往陣列中新加入乙個數,新加入的數從第n+1個位置,依次和前面的n個位置的數進行比較,直到找到比自己小的數,將新插入的數,放在這個數前面乙個位置
時間複雜度:o(n^2)
核心思想:public
class
insertsort
for(
int i =
1; i < arr.length; i++)}
}public
static
void
swap
(int
arr,
int i,
int j)
}
使用遞迴函式,找到乙個中間值,將中間值左右兩側排好序,然後再對左右兩側的數進行整體排序
時間複雜度:o(n*logn)
b空間複雜度:o(n)
public
class
mergesort
;mergesort
(arr)
; system.out.
println
(arrays.
tostring
(arr));
}public
static
void
mergesort
(int
arr)
sortprocess
(arr,
0,arr.length -1)
;}public
static
void
sortprocess
(int
arr,
int l,
int r)
int mid = l +
((r - l)
>>1)
;sortprocess
(arr, l, mid)
;sortprocess
(arr, mid +
1, r)
;merge
(arr,l,mid,r);}
private
static
void
merge
(int
arr,
int l,
int mid,
int r)
while
(p1 <= mid)
while
(p2 <= r)
for( i =
0; i < help.length; i++)}
}
思想:public
class
smallsum
return
mergesum
(arr,
0, arr.length -1)
;}public
static
intmergesum
(int
arr,
int l,
int r)
int mid = l +
((r - l)
>>1)
;return
mergesum
(arr, l, mid)
+mergesum
(arr, mid +
1, r)
+merge
(arr, l, r, mid);}
private
static
intmerge
(int
arr,
int l,
int r,
int mid)
while
(p1 <= mid)
while
(p2 <= r)
for(i =
0; i < arr.length; i++
)return res;
}}
這個太長了,感覺用文字描述,建議自己去b站或者網上搜一下大神怎麼講的,我就貼一下**
public
class
quicksort
;quicksort
(arr,
0,arr.length -1)
; system.out.
println
(arrays.
tostring
(arr));
}public
static
void
quicksort
(int
arr)
quicksort
(arr,
0, arr.length -1)
;}public
static
void
quicksort
(int
arr,
int l,
int r)
}public
static
int[
]partition
(int
arr,
int l,
int r)
else
if(arr[l]
> arr[r]
)else
}swap
(arr, more, r)
;return
newint
;}public
static
void
swap
(int
arr,
int i,
int j)
}
public
class
heapsort
for(
int i =
0; i < arr.length; i++
)//heapfiy : 大根堆上的某個數改變了,如何調整為大根堆
int heapsize = arr.length;
swap
(arr,0,
--heapsize)
;while
(heapsize >0)
}public
static
void
heapinsert
(int
arr,
int index)
}public
static
void
heapify
(int
arr,
int index,
int heapsize)
swap
(arr, index, largest)
;//largest != index(交換當前值和較大的值下表)
index = largest;
left = index *2+
1;}}
public
static
void
swap
(int
arr,
int i,
int j)
}
常見的排序演算法
一 氣泡排序 include include void swap int a,int b void bubblesort int arr,int size int main void bubblesort a,5 for int i 0 i 5 i cout 二 選擇排序 void selectio...
常見的排序演算法
需要包含的標頭檔案 include stdafx.h include include include 氣泡排序是穩定排序 時間複雜度 o n 2 void swap int a,int b void bubblesort int a,int n void printnum int a,int n a...
常見的排序演算法
排序演算法是最基礎,也是最簡單的演算法思想,因為應用場景多,書寫簡單,所以應用較為普遍,所以在面試和考試的時候,都會涉及到排序演算法,雖然排序演算法種類很多,但是只要理解了思想,然後靈活運用,那麼就不難記憶.排序演算法兩個需要記憶和理解的點就是 演算法思想和時間複雜度.下面我們就介紹和分析一下常見的...