今天上午复习了下排序,主要研究了冒泡排序和选择排序。相信学过java的同学们大家都知道排序有很多种,如快速排序、选择排序等,今天主要说说自己在复习过程中对冒泡排序和选择排序的收获。
<h1>冒泡排序</h1>
冒泡排序是排序中最基本的算法,原理是:比较相邻的两个数,如果前一个数大于后一个数,就将这两个数换位置。每一次遍历都会将本次遍历最大的数冒泡到最后。为了将n个数排好序,需要n-1次遍历。如果某次遍历中,没有调整任何两个相邻的数的位置关系,说明此时数组已排好序,可以结束程序。
以前是在Java中实现,今天我通过在js中实现,感觉又对js的理解加深一个层次。
html代码如下:
1 <div id="example1"> 2 <div>请输入需要排序的整数,以英文,隔开 :<input type="text" id="inner" name="arrs"/></div> 3 <div >获取到的数组:[<span id="arrs1"></span>]</div> 4 <button onclick="maoPaoSort()">点击开始冒泡排序</button> 5 <div >排序后结果为:[<span id="res1"></span>]</div> 6 </div>
js代码如下:
1 function maoPaoSort(){ 2 //1 得到需要排序的元素 3 var arr1 = document.getElementById('inner').value; 4 document.getElementById('arrs1').innerHTML=arr1; 5 //2 将arr1转换为数组 6 var arr1s = arr1.split(','); 7 // /*var lh=[7,3,45,5]; 8 var temp; 9 // alert(lh.length);*/ 10 // 进行冒泡排序 11 for (var i=0;i<arr1s.length;i++) { 12 for (var j=0;j<arr1s.length-i;j++) { 13 if ( parseInt(arr1s[j])>parseInt(arr1s[j+1])) { 14 /*arr1s[j]=arr1s[j]+arr1s[j+1]; 15 arr1s[j+1]=arr1s[j]-arr1s[j+1]; 16 arr1s[j]=arr1s[j]-arr1s[j+1];*/ 17 temp=arr1s[j]; 18 arr1s[j]=arr1s[j+1]; 19 arr1s[j+1]=temp; 20 21 } 22 } 23 } 24 //排序好之後吧输入放入res1中 25 var result1=''; 26 for(i=0;i<arr1s.length;i++){ 27 result1 += arr1s[i]+','; 28 } 29 30 result1 = result1.substring(0,result1.length-1); 31 alert(result1); 32 document.getElementById('res1').innerHTML=result1; 33 };
执行结果如下:
总结:冒泡排序相对来说比较简单:需要掌握
<h1>选择排序</h1>
选择排序的思想是:给定数组:int[] arr={里面n个数据};第1趟排序,在待排序数据arr[1]~arr[n]中选出最小的数据,将它与arrr[1]交换;第2趟,在待排序数据arr[2]~arr[n]中选出最小的数据,将它与r[2]交换;以此类推,第i趟在待排序数据arr[i]~arr[n]中选出最小的数据,将它与r[i]交换,直到全部排序完成。
html代码如下:
1 <div id="example2"> 2 <div>请输入需要排序的整数,以英文,隔开 :<input type="text" id="inner2" name="arrs2"/></div> 3 <div >获取到的数组:[<span id="arrs2"></span>]</div> 4 <button onclick="chooseSort()">执行选择排序</button> 5 <div >排序后结果为:[<span id="res2"></span>]</div> 6 </div>
js代码如下:
1 function chooseSort(){ 2 //1 得到需要排序的元素 3 var arr2 = document.getElementById('inner2').value; 4 document.getElementById('arrs2').innerHTML=arr2; 5 //2 将arr1转换为数组 6 var arr2s = arr2.split(','); 7 8 var i,j,temp,minIndex; 9 for (i=0;i<arr2s.length-1;i++) {//做第i趟排序 10 //记录最小的元素的索引,默认是0; 11 minIndex=i; 12 //从已经排好序的元素下一个 开始比较 13 for (j=minIndex+1;j<arr2s.length;j++) { 14 //如果最小索引的元素的值大于索引为j的元素的值,把j赋值给最小索引 15 if (parseInt(arr2s[minIndex])>parseInt(arr2s[j])) { 16 minIndex = j; 17 } 18 } 19 //当i和j不相等的时候进行交换 20 if (i!=minIndex) { 21 temp = arr2s[i]; 22 arr2s[i] = arr2s[minIndex]; 23 arr2s[minIndex] =temp; 24 } 25 } 26 //排序好之後吧输入放入res1中 27 var result2=''; 28 for(i=0;i<arr2s.length;i++){ 29 result2 += arr2s[i]+','; 30 } 31 //写入到res标签中 32 result2 = result2.substring(0,result2.length-1); 33 document.getElementById('res2').innerHTML=result2; 34 }
执行结果:
总结:选择排序我理解就是把数由小到大的顺序排列,需要注意的是在每一轮比较中是当前轮最小索引的元素和之后的元素一一比较,如果有比当前轮元素还小的,就把标记索引换为最小的,然后在第一轮比较中进行交换。