經常零零散散的用到排序演算法,將幾類常見的總結下來:
/**
* 時間複雜度o(n^2),空間複雜度o(1)
* 穩定排序
* @param arr
*/public
static
void
insersort
(int
arr)
else
} arr[j+1]
= tmp;
}}
/**
* 氣泡排序
* 時間複雜度 o(n^2),空間複雜度o(1)
* 穩定排序
* @param arr
*/public
static
void
bubblesort
(int
arr)}}
}
/**
* 選擇排序
* 時間複雜度o(n^2),空間複雜度o(1)
* 非穩定排序
* @param arr
*/public
static
void
selectsort
(int
arr)}if
(minflag != i)
}}
/**
* 快速排序
* 時間複雜度 o(nlogn),空間複雜度
* @param arr
* @param low
* @param high
*/public
static
void
quicksort
(int
arr,
int low,
int high)
}public
static
intpartiton
(int
arr,
int low,
int high)
arr[low]
= arr[high]
;while
( low < high && arr[low]
<= tmp)
arr[high]
= arr[low];}
arr[low]
= tmp;
return low;
}
/**
* 時間複雜度o(nlogn),空間複雜度o(n)
* 穩定排序
* @param arr
* @param low
* @param high
* @param tmp
*/public
static
void
mergesort
(int
arr,
int low,
int high,
int[
] tmp)
}private
static
void
merge
(int
arr,
int low,
int mid,
int high,
int[
] tmp)
else
}while
(j <= mid)
while
(k <= high)
for(
int index=
0;index)}
演算法 排序演算法整理 快速排序
快速排序是在氣泡排序的基礎上改進而來的,氣泡排序每次只能交換相鄰的兩個元素,而快速排序是跳躍式的交換,交換的距離很大,因此總的比較和交換次數少了很多,速度也快了不少。快速排序的演算法思想稍微有點複雜,但是還是比較容易理解的。快速排序的思想就是挖坑填坑 分治法 比如下面這個陣列,我們首先選擇乙個基準數...
演算法 排序演算法整理 計數排序
在氣泡排序,選擇排序,快速排序等比較型排序演算法中,我們最快只能做到o nlogn 的時間複雜度。而計數排序的時間複雜度是線性的,但是計數排序需要很多額外的空間。計數排序的主要步驟是 1 找出待排序陣列中最大和最小的數 2 根據最大和最小的數的值建立乙個陣列,用來記錄陣列中每乙個數的數量,陣列的大小...
排序演算法整理 快速排序
public static void quick sort int arr int l,int r quick sort arr,l,j quick sort arr,j 1,r 快排的思路 首先一組資料 找乙個基準數 這裡選用陣列的第一位做基準資料 之後i從前往後掃,找到乙個大於 或等於 基準資料...