假设现在有一段数组,需要把它从小到大排序
[8,9,2,5,7,4,1,3,6]
从最简单的O(n^2)开始思考
1.找到区间[i,n) 之间的最小值的下标
for i = 0; i < array.length -1;i++
minIndex = i
2.比较下一个索引的值是否比minIndex更小,如果是替换掉
for j = i+1; j < array.length; j ++
if array[j] < array[minIndex]
minIndex = j //把更小的j 赋值给minIndex
3.找到最小值下标后,交换数组元素的位置
这里还需要注意一个地方,当下班i = minIndex的时候说明遍历到数组的倒数第二个位置.所以还需要加一个判断
if i != minIndex
array[i],array[minIndex] = array[minIndex],array[i]
public class Select {
public static int[] SelectSort(int[] arr) {
if (arr.length < 1) {
return arr;
}else {
for (int i = 0; i < arr.length; i++) {
int min = i;
for (int j = i + 1; j < arr.length; j ++) {
if (arr[min] < arr[j]) {
min = j;
}
}
if (i != min) {
swapElementOne(arr,i,min);
}
}
return arr;
}
}
}
func Select(arr []int) []int {
length := len(arr)
if length <= 1 {
return arr
}else {
for i := 0; i < length-1; i++ {
min := i
for j := i+1; j < length; j++ {
if arr[min] < arr[j] {
min = j
}
}
if i != min {
arr[i],arr[min] = arr[min],arr[i]
}
}
return arr
}
}
+ (NSArray *)selectSort:(NSArray *)array {
if (array.count <= 1) {
return array;
}else {
for (NSInteger i = 0; i < array.count -1; i++) {
NSInteger min = i;
for (NSInteger j = i+1; j < array.count; j++) {
if (array[min] < array[j]) {
min = j;
}
}
if (i != min) {
NSMutableArray *temp = [[NSMutableArray alloc]initWithArray:array];
array = [Tool swapArrayElement:temp i:i j:min];
}
}
return array;
}
}
public func SelectSort<T: Comparable>(_ array: [T]) -> [T] {
guard array.count > 1 else {
return array
}
var tempArr = array
for i in 0..<array.count - 1 {
var min = i
for j in i + 1 ..< tempArr.count {
if tempArr[j] < tempArr[min] {
min = j
}
}
if i != min {
tempArr.swapAt(i, min)
}
}
return tempArr
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。