前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >多语言-选择排序SelectSort

多语言-选择排序SelectSort

原创
作者头像
Wilbur-L
发布2022-05-07 10:53:51
4280
发布2022-05-07 10:53:51
举报
文章被收录于专栏:iOS底层原理

一·算法思维

假设现在有一段数组,需要把它从小到大排序

代码语言:javascript
复制
[8,9,2,5,7,4,1,3,6]

从最简单的O(n^2)开始思考

1.找到区间[i,n) 之间的最小值的下标

代码语言:javascript
复制
for i = 0; i < array.length -1;i++
    minIndex = i

2.比较下一个索引的值是否比minIndex更小,如果是替换掉

代码语言:javascript
复制
for j = i+1; j < array.length; j ++
    if array[j] < array[minIndex]
        minIndex = j //把更小的j 赋值给minIndex

3.找到最小值下标后,交换数组元素的位置

这里还需要注意一个地方,当下班i = minIndex的时候说明遍历到数组的倒数第二个位置.所以还需要加一个判断

代码语言:javascript
复制
if i != minIndex
array[i],array[minIndex] = array[minIndex],array[i]

二·语言实现

Java

代码语言:java
复制
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;
        }
    }
}

golang

代码语言:go
复制
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
	}
}

Objective-C

代码语言:objective-c
复制
+ (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;
    }
}

Swift

代码语言:swift
复制
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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一·算法思维
  • 二·语言实现
    • Java
      • golang
        • Objective-C
          • Swift
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档