常見的排序演算法

2021-10-08 19:01:43 字數 4687 閱讀 1630

時間複雜度為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...

常見的排序演算法

排序演算法是最基礎,也是最簡單的演算法思想,因為應用場景多,書寫簡單,所以應用較為普遍,所以在面試和考試的時候,都會涉及到排序演算法,雖然排序演算法種類很多,但是只要理解了思想,然後靈活運用,那麼就不難記憶.排序演算法兩個需要記憶和理解的點就是 演算法思想和時間複雜度.下面我們就介紹和分析一下常見的...