扫码关注公众号
知道的排序算法 说一下冒泡快排的原理
冒泡排序:重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。快速排序:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
几种常见的排序算法,手写
基本排序算法:冒泡,选择,插入,希尔,归并,快排冒泡排序:functionbubbleSort(data){vartemp=0;for(vari=data.length;i>0;i--){for(varj=0;j<i-1;j++){if(data[j]>data[j+1]){temp=data[j];data[j]=data[j+1];data[j+1]=temp;}}}returndata;}选择排序:functionselectionSort(data){for(vari=0;i<data.length;i++){varmin=data[i];vartemp;varindex=1;for(varj=i+1;j<data.length;j++){if(data[j]<min){temp=data[j];data[j]=min;min=temp;}}temp=data[i];data[i]=min;data[index]=temp}}插入排序:functioninsertSort(data){varlen=data.length;for(vari=0;i<len;i++){varkey=data[i];varj=i-1;while(j>=0&&data[j]>key){data[j+1]=data[i];j--;}data[j+1]=key;}returndata;}希尔排序:functionshallSort(array){varincrement=array.length;varivartemp;//暂存do{//设置增量increment=Math.floor(increment/3)+1;for(i=increment;i<array.length;i++){if(array[i]<array[i-increment]){temp=array[i];for(varj=i-increment;j>=0&&temp<array[j];j-=increment){array[j+increment]=array[j];}array[j+increment]=temp;}}}while(increment>1)returnarray;}归并排序:functionmergeSort(array){varlen=array.length;if(len<2){returnarray;}varmiddle=Math.floor(len/2),left=array.slice(0,middle),right=array.slice(middle);returnmerge(mergeSort(left),mergeSort(right));}functionmerge(left,right){varresult=[];while(left.length&&right.length){if(left[0]<=right[0]){result.push(left.shift());}else{result.push(right.shift());}}while(left.length)result.push(left.shift());while(right.length)result.push(right.shift());returnresult;}快速排序functionquickSort(arr){if(arr.length==0)return[];varleft=[];varright=[];varpivot=arr[0];for(vari=0;i<arr.length;i++){if(arr[i]<pivot){left.push(arr[i]);}else{right.push(arr[i]);}}returnquickSort(left).concat(pivot,quickSort(right));}
什么是冒泡排序?
冒泡排序是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止