选择排序
什么是选择排序
选择排序是一种简单直观的排序算法,它的基本思想是将待排序的数据元素分成已排序区间和未排序区间,每次从未排序区间中选择一个最小(或最大)的元素插入到已排序区间的末尾,直到所有元素都排完为止。其时间复杂度为O(n^2),不适用于大规模数据排序
用python实现选择排序
def selection_sort(arr):
n = len(arr)
for i in range(n):
min_index = i
for j in range(i+1, n):
if arr[j] < arr[min_index]:
min_index = j
arr[i], arr[min_index] = arr[min_index], arr[i]
return arr
其中,arr
为待排序的列表。首先,我们用 n
记录列表的长度,然后通过两层循环遍历未排序区间,找到最小的元素,并将其与未排序区间的第一个元素交换位置。最后返回排好序的列表。
示例:
>>> arr = [5, 2, 6, 1, 3]
>>> selection_sort(arr)
[1, 2, 3, 5, 6]
用golang实现选择排序
func selectionSort(arr []int) []int {
n := len(arr)
for i := 0; i < n; i++ {
minIndex := i
for j := i+1; j < n; j++ {
if arr[j] < arr[minIndex] {
minIndex = j
}
}
arr[i], arr[minIndex] = arr[minIndex], arr[i]
}
return arr
}
其中,arr
为待排序的切片。首先,我们用 n
记录切片的长度,然后通过两层循环遍历未排序区间,找到最小的元素,并将其与未排序区间的第一个元素交换位置。最后返回排好序的切片。
示例:
arr := []int{5, 2, 6, 1, 3}
sortedArr := selectionSort(arr)
fmt.Println(sortedArr) // [1 2 3 5 6]
用js实现选择排序
function selectionSort(arr) {
const len = arr.length;
let minIndex, temp;
for(let i = 0; i < len - 1; i++) {
minIndex = i;
for(let j = i + 1; j < len; j++) {
if(arr[j] < arr[minIndex]) {
minIndex = j;
}
}
temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
return arr;
}
// 示例
const arr = [64, 25, 12, 22, 11];
console.log(selectionSort(arr)); // [11, 12, 22, 25, 64]
在这个示例中,我们定义了一个 selectionSort
函数,它接收一个待排序的数组作为参数。函数内部使用了两个嵌套的循环,外层循环用来遍历数组,内层循环用来在未排序的部分中寻找最小的元素,并将其与未排序部分的第一个元素交换位置。最终,函数返回经过排序后的数组
用ts实现选择排序
function selectionSort(arr: number[]): number[] {
const len = arr.length;
let minIndex, temp;
for(let i = 0; i < len - 1; i++) {
minIndex = i;
for(let j = i + 1; j < len; j++) {
if(arr[j] < arr[minIndex]) {
minIndex = j;
}
}
temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
return arr;
}
// 示例
const arr: number[] = [64, 25, 12, 22, 11];
console.log(selectionSort(arr)); // [11, 12, 22, 25, 64]
本例中,使用了 TypeScript 中的类型注解,声明了函数参数 arr
的类型为 number[]
,即表示一个数字类型的数组。在函数内部,使用 let
和 const
关键字声明变量。在循环语句中,使用了 let
声明循环变量,因为循环变量的值会在循环体内修改。在交换两个元素的值时,声明了一个临时变量 temp
,使用 const
关键字声明,因为它的值在交换完成后不会再被修改
其他部分与 JavaScript 实现相同。需要注意的是,在 TypeScript 中使用数组的方法和属性时,需要确保数组的类型与方法或属性的类型匹配,否则会导致编译时或运行时出错