选择排序不能正常工作
Selection sort doesn't work properly
我用选择排序排序我的数组,但它不能正常工作。
返回2、3、4、17、6、8、9、11、13等数组。
所以我写的选择排序算法错了吗?在其他情况下可以正常工作,但在这里不行。
<body>
<button onclick="func()">Click</button>
</body>
<script>
var arr = [4, 3, 11, 9, 18, 13, 6, 2];
var counter = 0;
function showarray() {
for (var i = 0; i < arr.length; i++) {
var divSort = document.createElement("div");
divSort.style.width = 30 + "px";
divSort.style.height = 30 + "px";
divSort.style.background = "yellow";
divSort.style.display = "inline-block";
divSort.style.margin = "10px";
divSort.id = arr[i];
divSort.innerHTML = arr[i];
document.body.appendChild(divSort);
}
}
showarray();
function func() {
for (var j = 0; j < arr.length-1; j++) {
var min=j;
for (var i = j+1; i < (arr.length); i++) {
if (arr[min] > arr[i]) {
min=i;
}
}
swap(min, j);
}
}
function swap(smaller, bigger) {
var tmpBigger = arr[bigger];
var tmpSmaller = arr[smaller];
arr[bigger] = tmpSmaller
arr[smaller] = tmpBigger;
setTimeout(function() {
$("#" + tmpSmaller).insertBefore("#" + tmpBigger);
}, ++counter * 2000);
}
按数字排序:
var arr = [4, 3, 17, 11, 9, 8, 13, 6, 2];
arr.sort(function(a, b) {
return a - b;
});
alert(arr);
这个交换函数将与同级函数一起工作:
function swap(ind1, ind2) {
var valueOne = arr[ind1];
var valueTwo = arr[ind2];
arr[ind2] = valueOne;
arr[ind1] = valueTwo;
setTimeout(function () {
elementSwap($('#' + valueOne), $('#' + valueTwo));
}, ++counter * 2000);
}
function elementSwap(jq1, jq2) {
var tmp;
if (jq1.prev().length > 0) {
tmp = jq1.prev();
jq1.insertBefore(jq2);
jq2.insertAfter(tmp);
} else {
tmp = jq1.next();
jq1.insertBefore(jq2);
jq2.insertBefore(tmp);
}
}
同样,在这种情况下,大小的区别并不重要。
我还建议只在min
与j
不同时进行交换:
if (min !== j) swap(min, j);
var arr = [4, 3, 17, 11, 9, 8, 13, 6, 2];
var counter = 0;
function showarray() {
for (var i = 0; i < arr.length; i++) {
var divSort = document.createElement("div");
divSort.style.width = 30 + "px";
divSort.style.height = 30 + "px";
divSort.style.background = "yellow";
divSort.style.display = "inline-block";
divSort.style.margin = "10px";
divSort.id = arr[i];
divSort.innerHTML = arr[i];
document.body.appendChild(divSort);
}
}
showarray();
function func() {
for (var j = 0; j < arr.length - 1; j++) {
var min = j;
for (var i = j + 1; i < (arr.length); i++) {
if (arr[min] > arr[i]) {
min = i;
}
}
if (min !== j) swap(min, j);
}
}
function swap(ind1, ind2) {
var valueOne = arr[ind1];
var valueTwo = arr[ind2];
arr[ind2] = valueOne;
arr[ind1] = valueTwo;
setTimeout(function () {
elementSwap($('#' + valueOne), $('#' + valueTwo));
}, ++counter * 2000);
}
function elementSwap(jq1, jq2) {
var tmp;
if (jq1.prev().length > 0) {
tmp = jq1.prev();
jq1.insertBefore(jq2);
jq2.insertAfter(tmp);
} else {
tmp = jq1.next();
jq1.insertBefore(jq2);
jq2.insertBefore(tmp);
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button onclick="func()">Click</button>
相关文章:
- Javascript:selenium Web驱动程序isDisplayed()不工作
- jQuery UI自动完成突然停止工作
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- JavaScript打印功能使日历停止工作
- Javascript.getHours()工作不正常
- 为什么这在IE中的工作方式与在Firefox中不同
- 视频HTML没有'无法在Internet Explorer 11上工作
- 扩展移相器按钮类不工作
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- 谷歌地图不是以HTML显示,而是在JS Fiddle上工作
- 正在尝试使用if和else添加类,但无法正常工作
- Jquery FadeIn FadeOut 只工作一次
- Foreach无法在Typescript中工作
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- JS可以在Chrome中工作,但不能在Firefox中工作
- 最大高度转换不;不工作,工作缓慢
- Gulp-rev:不是第一次工作,而是在第一次工作之后工作
- JQuery - Ajax: encodeUriComponent不工作(EncodeUri工作)