选择排序按照动画效果来看应该只记录最小的索引,最后在内层循环结束后再交换数值
来源:5-9 缺失的第一个正数(2)
布衣小酱
2019-04-06
发现老师在选择排序的时候,发现了最小值就要交换两个数字,在观看动画效果和网上查找资料后,发现在内层循环时,只记录最小值所在的索引即可,内层循环结束后,再交换。附上修改后的本题代码
export default (arr) => {
arr = arr.filter(item => item > 0)
// 实现选择排序,先拿到最小值,如果第一个元素不是1直接返回1,如果是1,就要比相邻元素差值
for (let i = 0, len = arr.length, min; i < len; i++) {
min = i
for (let j = i + 1; j < len; j++) {
if (arr[j] < arr[min]) {
min = j
}
}
if (min !== i) {
let tmp = arr[i]
arr[i] = arr[min]
arr[min] = tmp
}
if (i > 0) {
if (arr[i] - arr[i - 1] > 1) {
return arr[i - 1] + 1
}
} else {
if (arr[i] !== 1) {
return 1
}
}
}
return arr.length ? arr.pop() + 1 : 1
}
写回答
2回答
-
东方既白233
2019-05-08
void swap(int *a,int *b) //交換兩個變數{ int temp = *a; *a = *b; *b = temp;}void selection_sort(int arr[], int len) { int i,j; for (i = 0 ; i < len - 1 ; i++) { int min = i; for (j = i + 1; j < len; j++) //走訪未排序的元素 if (arr[j] < arr[min]) //找到目前最小值 min = j; //紀錄最小值 swap(&arr[min], &arr[i]); //做交換 }}https://zh.wikipedia.org/wiki/%E9%80%89%E6%8B%A9%E6%8E%92%E5%BA%8F
维基百科的标准答案,同学你的理解没有错
10 -
快乐动起来呀
2019-04-08
感觉你没有把课程的选择排序理解正确
022020-02-06
相似问题