p; while j >= 0 {
if arr1[j] > key {
arr1[j + 1] = arr1[j]
arr1[j] = key
}
j -= 1
}
}
print(arr1)
// 选择排序
var arr2:Array<Int> = [100, 304, 203, 90, 102]
for i in (0..<arr2.count - 1) {
// print(i)
var index = i
for j in (i..<arr2.count) {
if arr2[index] > arr2[j] {
index = j
}
}
let tmp = arr2[i]
arr2[i] = arr2[index]
arr2[index] = tmp
}
print(arr2)
/*********** 两种快速排序: ***********/
// quick sort1
var array = [66,13,51,76,81,26,57,69,23]
func partition( list:inout [Int],left:Int,right:Int) -> Int{
var pivot_index = left
let piovt = list[left]
for i in (left ... right) {
print(i)
if list[i] < piovt {
pivot_index += 1
if pivot_index != i {
swap(&list[pivot_index], &list[i])
}
}
}
swap(&list[left], &list[pivot_index])
return pivot_index
}
func quickSortArray( list:inout [Int],left:Int,right:Int) -> Void{
if left < right {
let pivot_index = partition(list: &list, left: left, right: right)
quickSortArray(list: &list, left: left, right: pivot_index - 1)
quickSortArray(list: &list, left: pivot_index + 1, right: right)
}
}
quickSortArray(list: &array, left: 0, right: array.count - 1)
showArray(array: array)
// quick sort 2
func quicksort<T: Comparable>(_ a: [T]) -> [T] {
guard a.count > 1 else { return a }
let pivot = a[a.count/2]
let less = a.filter { $0 < pivot }
let equal = a.filter { $0 == pivot }
let greater = a.filter { $0 > pivot }
return quicksort(less) + equal + quicksort(greater)
}
let list1 = [ 10, 0, 3, 9, 2, 14, 8, 27, 1, 5, 8, -1, 26 ]
print(quicksort(list1))