1. 程式人生 > >JS雙重for迴圈實現氣泡排序

JS雙重for迴圈實現氣泡排序

一、交換變數

由於氣泡排序需要用到交換變數,所以需要掌握交換變數的原理

假設,左手裡拿了一個蘋果,右手裡拿了一個橘子,想要蘋果和橘子調換位置,要怎麼做?可見,需要先騰出一隻手。

例如:

1、先把左手蘋果放到桌子上 

2、把右手橘子給左手

3、右手再拿起桌子上的蘋果

示例:

        var num1 = 10;  // 左手蘋果
        var num2 = 20;  // 右手橘子
        var temp = num1;  // 把左手蘋果放到桌子上
        num1 = num2;  // 右手橘子給左手
        num2 = temp;  // 右手再拿起桌子上的蘋果
        console.log(num1, num2);  // 即可交換位置

二、氣泡排序

氣泡排序是一種演算法,將一系列的資料按照一定的順序排列,從大到小或從小到大

過程演示

氣泡排序是將第一位資料和後面一位資料比較,若比較結果為真,兩個資料交換位置,再進行下次比較,若比較結果為假,直接進行下次比較

例如:

有一組資料:5,4,3,2,1

第一次比較:5和4比較,5>4,將5和4調換位置,依次類推可得到資料:4,3,2,1,5    前後互相比較了四次

第二次比較:3,2,1,4,5    比較了三次

第三次比較:2,1,3,4,5    比較了兩次

第四次比較:1,2,3,4,5    比較了一次

若資料的長度為length,則比較的次數為length-1    每次前後比較的次數為   length-1-i   i(從0開始,依次遞增)

由此可見,每迴圈一次,資料都交換了一遍,則比較的次數為外層for迴圈,前後交換的次數為內層for迴圈

程式碼實現:

     <script>
        var arr = [1,2,3,4,5];  // 陣列儲存的資料
        for (var i = 0; i < arr.length - 1; i++) {  // 比較的次數
        	for (var j = 0; j < arr.length - 1 - i; j++) { // 前後交換的次數
        		if (arr[j] < arr[j + 1]) {  // 判斷大小
        			var temp = arr[j];  // 若判斷的結果為真,則交換兩個變數,若為假,直接進行下次比較
        			arr[j] = arr[j + 1];
        			arr[j + 1] = temp;
        		}
        	}
        }
        console.log(arr);
    </script>

相關推薦

JS雙重for迴圈實現氣泡排序

一、交換變數 由於氣泡排序需要用到交換變數,所以需要掌握交換變數的原理 假設,左手裡拿了一個蘋果,右手裡拿了一個橘子,想要蘋果和橘子調換位置,要怎麼做?可見,需要先騰出一隻手。 例如: 1、先把左手蘋果放到桌子上  2、把右手橘子給左手 3、右手再拿起桌子上的蘋果

(3)C#for迴圈實現氣泡排序

class Program { static void Main(string[] args) { int[] a = { 15,17,3,4,4,19,6,7,11,9,10}; //

JS使用sort方法實現氣泡排序和亂序

預設的sort排序依據是ASCⅡ碼,所以從小到大排列遇到11可能排在個位數前面去了。 因此在數字進行排序時,需要新增函式入口點到sort函式中,就是改變sort函式的排序依據,通過不同的函式入口點,實現不同的排序效果。這裡介紹一下氣泡排序和亂序。 var a

氣泡排序for迴圈實現

//#include<iostream> #include<stdio.h> #include<stdlib.h> void main() { int a

JS實現停留幾秒sleep,Jsfor迴圈的阻塞機制,setTimeout延遲執行

//第一種,使用while迴圈 function sleep(delay) { var start = (new Date()).getTime(); while((new Date()).getTime() - start < delay) { continue;

演算法之JS實現氣泡排序的3種方式

今天跟同學探討了排序演算法中的氣泡排序,很早之前其實就寫過這個程式碼,但是一直沒有正式的寫到部落格中來,其實氣泡排序是九大排序中最簡單的一個,也是最容易理解的一個排序,好了,廢話不多說,我們先來談一下氣泡排序的思想。 氣泡排序的思想:我們以從小到大排列為例,所

js實現氣泡排序和快速排序

氣泡排序 1.比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。 2.對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。 3.針對所有

js實現氣泡排序

一:冒牌排序 1思想:每一次對比相鄰兩個資料的大小,小的排在前面,如果前面的資料比後面的大就交換這兩個數的位置    要實現上述規則需要用到兩層for迴圈,外層從第一個數到倒數第二個數,內層從外層的後面一個數到最後一個數 2特點:排序演算法的基礎。簡單實用易於理解,

js實現氣泡排序及優化

    就排序演算法來說氣泡排序算是比較好理解的了,設想一下這樣一個上體育課的排隊的場景。體育老師要求按身高的由低到高依次排列成一隊,假設這是這學期的第一次體育課。大家剛開始都是處於亂排的狀態,假設隊伍有n個人。這時體育

JSfor迴圈之斐波拉切數列-兔子問題

兔子問題: 有個人想知道,一年之內一對兔子能繁殖多少對?於是就築了一道圍牆把一對兔子關在裡面。已知一對兔子每個月可以生一對小兔子,而一對兔子從出生後第3個月起每月生一對小兔子。假如一年內沒有發生死亡現象,那麼,一對兔子一年內(12個月)能繁殖成多少對?(兔子的規律為數列,1,1,2,3,5,8,

JavaScript for迴圈實現表格隔行變色

本程式碼主要演示的是for迴圈, <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>JavaScript for迴圈實現表格隔行變色&l

JS獲取for迴圈中i的實時值

最近在完成燈箱效果時,需要獲取for迴圈中i的實時值來定位大圖輪播的索引,但最初獲得的是i的最大值 幾種獲取for迴圈中i的實時值方法: 自調: for (var i = 0; i < itemli.length; i++) { (function (arg) {

for迴圈實現九九乘法表

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css">

JAVA實現-使用for迴圈 實現九九乘法表/列印矩形-三角形-菱形

package com.company; public class Main { /** * 列印九九乘法表 * @param args */ public static void main(String[] args) { for

Python實現氣泡排序,選擇排序,快速排序

氣泡排序 原理 : 氣泡排序(Bubble Sort)也是一種簡單直觀的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。 def bubble_sor

彙編實現氣泡排序

1.輸入部分實現 ;下面是寫入過程,各暫存器存的東西: ;AX 用於DOS呼叫,然後還用於*10,/10之後存放結果 ;BX 用於記錄存了多少個數(每個數2位元組16位) ;CX 存放SHL、SHR的移動次數(超過1要放在CL裡) ;DX 用於存放得到每個數之前的臨時值 NNUM:;先把當前

Java 實現氣泡排序法對陣列進行排序

氣泡排序是交換排序中的一種簡單的排序方法。它的基本思想是對所有相鄰記錄的關鍵字值進行比較,如果是逆序(a[j]>a[j+1]),則將其交換,最終達到有序化。  public class BubbleSort { public void sortArray() { int

jsfor迴圈裡新增事件後獲取i

1 <ul> 2 <li index="1">1</li> 3 <li index="2">1</li> 4 <li index="3">1</l

JSfor迴圈如何令變數每次增量不是1?

for迴圈的常見格式是for(var i=0;i<arr.length;i++){……}。對於有些情況下,需要間隔獲取物件,採用加1的迴圈雖然可以通過設定條件來實現,但是直接從for迴圈的變數增量著手也可以一步到位。 for迴圈增量為2的程式碼: for(var i

Java——用Java實現氣泡排序,選擇排序,快速排序和二分查詢

在學習C語言時,就有講過這三個排序演算法和二分查詢的演算法。 以下是用Java來實現氣泡排序(Bubble Sort)演算法,選擇排序(Selection Sort),快速排序(Quick Sort)和二分查詢(Binary Search) package pra_07;