Java 一些常見的 排序演算法 面試也會問的演算法

2021-08-10 16:50:13 字數 2628 閱讀 4240

氣泡排序 有兩層迴圈,外層遞減,內層遞增,每一趟都會得到最大的值,因為存在連個for迴圈,基本上每趟迴圈都會交換n次,所以一共交換n的平方次,所以時間複雜度為o(n2),屬於效率最差的演算法

public

static

void

pop(

inta )

}}}

選擇排序 就是氣泡排序的改進版,首先選出乙個最小的元素放在陣列最左邊,然後下一趟再選出最小的乙個放到左邊第二個位置上,以此類推

兩層for迴圈,從第乙個位置開始,裡面的一層迴圈得到這一趟中最小的下標min,然後記錄下來,得到後就判斷該min和開始位置的下標是否相等,如果不相等,就把他們交換。

public

static

void

select

(int

a ) }

// 現在

min值得就是最小樹的下標,現在判斷

min和i(i是最左邊的位置)的值,

// 如果不相等,就最最小的數和開始第一位交換

if

( min

!=i ) }

}選擇排序和氣泡排序的時間複雜度是一樣的為o(n2)n的平方,但是交換的次數少了,10個資料,最多隻需要交換10次。

插入排序

public

static

void

insert(

int

a )

a[ in

] =temp

; }

} 主要思路: 先認為第1個元素是排好序的,然後選擇第二個元素作為標記位temp,然後temp和前面的元素進行比較,如果前面的元素比temp大,那麼就把前面的元素後移乙個位置,最後當發現前面的元素不比temp大的時候,就把temp放在這個元素的位置上,實際上這個後移的操作。

快速排序**

public

static

int

partition(

int

array

,int

lo ,

int

hi )

array

[ lo

] =array

[ hi

];while

( array

[ lo

]<

key&& lo

<

hi )

array

[ hi

] =array

[ lo

];}array

[ hi

] =key

;pir

( array

);return

hi ;

}public

static

void

fast(

int

array

,int

lo ,

int

hi )

int

index =

partition

( array

, lo

, hi

);fast

( array

, lo

, index

-1);

fast

( array

, index

+1,hi );}

演算法思想:基於分治的思想,是氣泡排序的改進型。首先在陣列中選擇乙個基準點(該基準點的選取可能影響快速排序的效率,後面講解選取的方法),然後分別從陣列的兩端掃瞄陣列,設兩個指示標誌(lo指向起始位置,hi指向末尾),首先從後半部分開始,如果發現有元素比該基準點的值小,就交換lo和hi位置的值,然後從前半部分開始掃秒,發現有元素大於基準點的值,就交換lo和hi位置的值,如此往復迴圈,直到lo>=hi,然後把基準點的值放到hi這個位置。一次排序就完成了。以後採用遞迴的方式分別對前半部分和後半部分排序,當前半部分和後半部分均有序時該陣列就自然有序了。

希爾排序

void shell_sort(int a, int n)   n是陣列的size();

// 注意,這裡的j已經被減過乙個h 了,一般為負數,所以 j+h = j 回到之前的值

a[j+h] = temp;   

}   

}     }

// 就先寫到這裡吧,後面有時間再補充

一些常見的排序演算法

為了便於說明,假設是公升序排列,降序容易以此推斷 1 選擇排序 查詢數列 含n個數 中的最大項並把它與最後一項交換,然後查詢數列前n 1項中的最大項,並把它與這n 1項的最後一項交換,以此類推。2 氣泡排序 比較相鄰的兩項資料,如果次序顛倒則交換之,最多需要比較n 1趟。第一趟結束,最大項已經到末尾...

一些常見的排序演算法

複雜度為n 2的排序 常見的有 插入排序 氣泡排序 選擇排序 地精排序,是插入排序的另一種寫法,可以只用乙個迴圈 public static int charu int ins else return ins public static int int in return in public sta...

總結了一些常見的排序演算法,面試必備啊

名稱 複雜度 說明 備註 氣泡排序 bubble sort o n n 將待排序的元素看作是豎著排列的 氣泡 較小的元素比較輕,從而要往上浮 插入排序 insertion sort o n n 逐一取出元素,在已經排序的元素序列中從後向前掃瞄,放到適當的位置 起初,已經排序的元素序列為空 選擇排序 ...