JavaScript_day08

day08內容

學習目標
1.冒泡排序算法
2.選擇排序算法
3.插入排序算法
4.對象

1.冒泡排序 Bubble Sort
計算機科學領域的較簡單的排序算法
原理如下:
比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
針對所有的元素重複以上的步驟,除了最後一個。
持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
代碼實現:
var arr = [223, 4, 5, 734, 2, 33, 23, 99];
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;
}
}
}
第一輪 [ 4, 22, 223, 2, 77, 23, 99, 734 ]
第二輪 [ 4, 22, 2, 77, 23, 99, 223, 734 ]
第三輪 [ 4, 2, 22, 23, 77, 99, 223, 734 ]
第四輪 [ 2, 4, 22, 23, 77, 99, 223, 734 ]
第五輪 [ 2, 4, 22, 23, 77, 99, 223, 734 ]
第六輪 [ 2, 4, 22, 23, 77, 99, 223, 734 ]
第七輪 [ 2, 4, 22, 23, 77, 99, 223, 734 ]

2.選擇排序 Selection sort
簡單直觀的排序算法
算法原理:
第一次從待排序的數據元素中選出最小的一個元素,存放在序列的起始位置,然後再從剩餘的未排序元素中尋找到最小元素,然後放到已排序的序列的末尾。以此類推,直到全部待排序的數據元素的個數爲零。選擇排序是不穩定的排序方法
選擇排序算法思想:在冒泡排序上做了優化,減少了交換次數,在首輪選擇最小的數放在第一項,一輪之後第一項是有序的了,第二輪從第二項開始選擇小的數放在第二項,以此類推,直到整個數組完全有序。
代碼實現:
var arr = [223, 4, 22, 734, 2, 77, 23, 99];
for (var i = 0; i < arr.length - 1; i++) {
//假設0位是最小的
var minIndex = i;
//從之後的元素中找最小的
for (var j = i + 1; j < arr.length; j++) {
if(arr[j] < arr[minIndex]){
minIndex = j;
}
}
var temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
第一輪[ 2, 4, 22, 734, 223, 77, 23, 99 ]
第二輪[ 2, 4, 22, 734, 223, 77, 23, 99 ]
第三輪[ 2, 4, 22, 734, 223, 77, 23, 99 ]
第四輪[ 2, 4, 22, 23, 223, 77, 734, 99 ]
第五輪[ 2, 4, 22, 23, 77, 223, 734, 99 ]
第六輪[ 2, 4, 22, 23, 77, 99, 734, 223 ]
第七輪[ 2, 4, 22, 23, 77, 99, 223, 734 ]
3.插入排序 Insertion sort
簡單直觀且穩定的排序算法
算法原理:
插入算法把要排序的數組分成兩部分:第一部分包含了這個數組的所有元素,但將最後一個元素除外(讓數組多一個空間纔有插入的位置),而第二部分就只包含這一個元素(即待插入元素)。在第一部分排序完成後,再將這個最後元素插入到已排好序的第一部分中。
插入排序的基本思想是:每步將一個待排序的記錄,按其值的大小插入前面已經排序的數據中適當位置上,直到全部插入完爲止。
代碼實現:
var arr = [223, 4, 22, 734, 2, 77, 23, 99];
for(var i=0;i<arr.length-1;i++){
//比較相鄰元素,如果當前要插入的元素比之前的相鄰元素小,交換
for(var j=i+1;j>0;j–){
if(arr[j]<arr[j-1]){
var temp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = temp;
}
}
console.log(‘第’+(i+1)+‘輪’,arr);
}
console.log(‘排序後的數組’,arr);
[223, 4, 22, 734, 2, 77, 23, 99]
第一輪[ 4, 223, 22, 734, 2, 77, 23, 99 ]
第二輪[ 4, 22, 223, 734, 2, 77, 23, 99 ]
第三輪[ 4, 22, 223, 734, 2, 77, 23, 99 ]
第四輪[ 2, 4, 22, 223, 734, 77, 23, 99 ]
第五輪[ 2, 4, 22, 77, 223, 734, 23, 99 ]
第六輪[ 2, 4, 22, 23, 77, 223, 734, 99 ]
第七輪[ 2, 4, 22, 23, 77, 99, 223, 734 ]

  1. 複雜數據類型 Object
    ECMAScript中的對象其實就是一組數據(屬性)和功能(方法)的集合。
    一切皆對象
    水龍頭對象
    屬性:顏色,材質,大小
    方法:放熱水,放冷水
    人對象
    屬性:膚色,年齡,姓名,性別,身高,體重
    方法:會說中國話,會說英語,會打籃球,會唱歌…

    1. 創建Object實例:
      1.使用構造函數創建,new Object()
      var person = new Object();
      person.name = “briup”;
      person.age = 22;

    2.使用對象字面量表示法
    不同的屬性之間用’,‘分割,屬性名和屬性值之間用’:'分割
    var person = {
    name : “briup”,
    age : 22
    };
    2) 訪問對象屬性
    1.點表示法,右側必須是以屬性名稱命名的簡單標識符
    person.name
    2.中括號表示法,中括號中必須是一個計算結果爲字符串的表達式,可以通過變量訪問屬性,如果屬性名中包含語法錯誤的字符,或者屬性名使用的是關鍵字或保留字,可以使用中括號 person[“first name”]
    var a = “name”;
    person[a]; //既person[“name”]
    person[“first name”]
    3) 刪除屬性
    delete只是斷開了屬性和宿主對象的聯繫,而不會操作屬性中的屬性,並且delete只會刪除自有屬性,不能刪除繼承屬性。在銷燬對象時,爲了防止內存泄露,遍歷對象中的屬性,依次刪除所有屬性。
    語法:delete 屬性訪問表達式
    例如:
    delete stu.name //刪除學生對象中的name屬性

Note

作業
有1、2、3、4個數字,能組成多少個互不相同且無重複數字的三位數?都是多少?
4321 排列組合 24
//拿第一位數,拿第二位數,拿第三位數,判斷他們都不相同的情況下,進行計數和打印
var count = 0;
for(var a=1;a<=4;a++){
for(var b=1;b<=4;b++){
for(var c=1;c<=4;c++){
if(a!=b && b!=c && a!=c){
count++;
console.log(a
100+b*10+c); //111
//var result = a+’’+b+’’+c+’’; //‘111’
//console.log(result);
//a+b+c+’’ ‘3’
}
}
}
}
console.log(‘總共有多少個’,count);


複習
分支語句
if(){
}
if(){
}else{
}
if(){
}else if(){
}else{
}
switch(變量或者表達式){
case 值或者變量:

break;
case 值或者變量:

break;
default:

break;
}
switch(5>3){
case true:

break;
default:

break;
}
var num = 10;
var test = 10;
switch(num){
case test:

break;

}
循環語句
for(初始條件;結束條件;迭代條件){
循環體
}
初始條件 前測試語句
while(結束條件){
循環體
迭代條件
}
初始條件 後測試語句
do{
循環體
迭代條件
}while(結束條件)
for-in用來遍歷對象
var obj = {name:’’,age:1};
for(var key in obj){
//key變量–>屬性名
//obj[key]–>屬性值
}

for(var a in obj){
//a變量–>屬性名
//obj[a]–>屬性值
}
關鍵字
continue
結束本次循環,進行下次循環
break
終止循環,結束整個循環
label語句
給循環起別名
test:for(var i=0;i<10;i++){
if(i==5){
break test;
}
}
遞歸
在函數內部調用函數本身,一層一層傳遞下去,最終到達一個出口,將結果歸結起來。

計算階乘
function mul(num){
if(num<1){
return ‘請計算大於等於1的數值的階乘’;
}
return num1?1:numarguments.callee(num-1);
/

if(num
1){
return 1;
}
return num*mul(num-1);
*/
}
mul(5);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章