冒泡排序
func bubbleSort(arr:inout [Int]){
guard arr.count > 1 else{
return
}
for i in 0..<arr.count-1{
for j in 0..<arr.count-1-i{
if arr[j]>arr[j+1]{
let temp = arr[j]
arr[j] = arr[j+1]
arr[j+1] = temp
}
}
}
}
选择排序
//选择排序 首先要搞个最小值,然后内圈比对改变最小索引 外圈替换
func selectSort(arr:inout [Int]){
guard arr.count > 1 else{
return
}
for i in 0..<arr.count-1{
var min = i
for j in i+1..<arr.count{
if arr[j] < arr[min]{
min = j
}
}
let temp = arr[i]
arr[i] = arr[min]
arr[min] = temp
}
}
插入排序
//插入排序 内层使用 while 循环
func insertSort(arr:inout [Int]){
guard arr.count > 1 else{
return
}
for i in 1..<arr.count{
var j = i
let temp = arr[i]
while j > 0 && temp < arr[j-1] {
arr[j] = arr[j-1]
j -= 1
}
arr[j] = temp
}
}
希尔排序
func shellSort(arr:inout [Int]){
guard arr.count > 1 else{
return
}
let n = arr.count
var h = 1
while h < n / 3 {//动态定义间隔序列
h = 3 * h + 1
}
while h > 0 {
for i in h..<n{
var j = i
let temp = arr[i]
while j >= h && temp < arr[j-h] {
arr[j] = arr[j-h]
j -= h
}
arr[j] = temp
}
h /= 3
}
}
归并排序
func mergeSort(arr: [Int])->[Int]{
guard arr.count > 1 else {
return arr
}
let mid = arr.count/2
let leftArr = mergeSort(arr: [Int](arr[0..<mid]))
let rightArr = mergeSort(arr: [Int](arr[mid..<arr.count]))
return merge(leftArr: leftArr, rightArr: rightArr)
}
func merge(leftArr:[Int],rightArr:[Int])->[Int]{
var left = 0
var right = 0
var orderArr = [Int]()
while left < leftArr.count && right < rightArr.count {
if leftArr[left] < rightArr[right]{
orderArr.append(leftArr[left])
left += 1
}else if leftArr[left] > rightArr[right]{
orderArr.append(rightArr[right])
right += 1
}else{
orderArr.append(leftArr[left])
left += 1
orderArr.append(rightArr[right])
right += 1
}
}
while left < leftArr.count {
orderArr.append(leftArr[left])
left += 1
}
while right < rightArr.count {
orderArr.append(rightArr[right])
right += 1
}
return orderArr
}
快速排序
func quickSort(arr: inout [Int],_ low:Int,_ high:Int){
guard arr.count > 1 else {
return
}
guard low < high else {
return
}
var i = low,j = high
var p = arr[i]
while i < j {
while i < j && arr[j] >= p{
j -= 1
}
arr[i] = arr[j]
while i < j && arr[i] <= p {
i += 1
}
arr[j] = arr[i]
}
p = arr[i]
quickSort(arr: &arr, low, i-1)
quickSort(arr: &arr, i+1, high)
}
堆排序
func heapSort(arr:inout [Int]){
var i = arr.count/2 - 1
while i>=0 {
adjustHeap(arr: &arr, i, arr.count)
i -= 1
}
var j = arr.count - 1
while j >= 1 {
arr.swapAt(0, j)
adjustHeap(arr: &arr, 0, j)
j -= 1
}
}
func adjustHeap(arr : inout [Int],_ index:Int,_ length:Int){
var i = index
let temp = arr[i]
var k = 2 * i + 1
while k < length {
if k+1 < length && arr[k] < arr[k+1]{
k += 1
}
if arr[k] > temp{
arr[i] = arr[k]
i = k
}else{
break
}
k = k*2+1
}
arr[i] = temp
}