1.冒泡排序
function bubbleSort(arr) {
var temp; //臨時交換變量
let n = arr.length; //記錄數(shù)組長度
let count=0; //計數(shù)赌莺,記錄一共進行了多少次交換
//document.write('數(shù)組長度為:'+n+'<br />') //輸出數(shù)組成都
for (let i=0; i<n; i++) { //外層循環(huán),排序出數(shù)組的arr[i]的值
let flag=0; //交換標志
for (let j=n-1; j>i; j-- ) { //內(nèi)層循環(huán),從底往上冒泡,將小泡浮到arr[i]位置
//alert(0);
if (arr[j-1]>arr[j]) { //比較兩個元素大小,并交換位置
temp=arr[j-1];
arr[j-1]=arr[j];
arr[j]=temp;
flag=flag+1; //確定交換標志
count=count+1; //記錄比較元素的次數(shù)
//console.log(flag);
//console.log('共交換了:'+count+'次');
}
//console.log(arr) //輸出數(shù)組
}
if (flag==0) { //跳出循環(huán)
break;
}
}
document.write('冒泡排序執(zhí)行次數(shù)為:'+count+'<br />')
return arr; //返回數(shù)組
}
2.簡單選擇排序
function selectSort(arr) {
let temp;
let n = arr.length;
let count =0;
for (let i=0; i<n; i++) {
for (let j= i+1; j<n; j++) {
count++;
if (arr[j]<arr[i]) {
temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
}
document.write('簡單選擇排序執(zhí)行次數(shù)為:'+count);
return arr;
}
3.直接插入排序
function insertSort(arr) {
let i,j;
let n= arr.length;
let count = 0;
for (i=1; i<n; i++) {
if (arr[i]<arr[i-1]) {
arr[-1] = arr[i]; //將i位置的值給哨兵
for (j=i-1; arr[j]>arr[-1];j--) { //當(dāng)i位置前面的值比哨兵小,后移i位置的值虚倒,并插入哨兵到原先i位置
arr[j+1] = arr[j];
arr[j] = arr[-1];
count++;
}
}
}
document.write('直接插入排序執(zhí)行次數(shù)為:'+count);
return arr;
}
4.希爾排序
function shellSort(arr) {
let d = arr.length;
let i;
let temp; //暫存
do {
//設(shè)置增量
d = Math.floor(d / 3) + 1;
for (i = d ; i < arr.length; i++) {
if (arr[i] < arr[i - d]) {
temp = arr[i];
for (var j = i - d; j >= 0 && temp < arr[j]; j -=d) {
arr[j + d] = arr[j];
arr[j] = temp;
}
}
}
}
while (d > 1)
return arr;
}
5.去重算法
function unique(arr) {
let brr=[];
for (let i=0; i<arr.length; i++) {
if (brr.indexOf(arr[i]) < 0) {
brr.push(arr[i]);
}
}
return brr;
}
6.快速排序
function partition(arr,low,high) {
let temp=arr[low], //基準值
changetemp; //用于交換的臨時變量
while (low<high) {
while (low<high && arr[high]>=temp) {
high--;
} //當(dāng)從high往前掃時,大于基準值時,high--
//swap(arr, low, high); //當(dāng)從high往前掃時钱磅,小于基準值時,交換基準值和arr[high]位置
changetemp=arr[low];
arr[low]=arr[high];
arr[high]=changetemp;
while(low<high && arr[low]<=temp) {
low++;
} //當(dāng)從low往后掃時似枕,小于基準值時盖淡,low++
//swap(arr, low, high); //當(dāng)從low往后掃時,大于基準值時菠净,交換基準值和arr[low]的位置
changetemp=arr[low];
arr[low]=arr[high];
arr[high]=changetemp;
}
return low;
}
//快速排序
function quick(arr,low,high) {
let pivot; //定義樞軸值
if (low < high) {
pivot = partition(arr,low,high); //求得第一個基準值第一次排序完的位置作為樞軸值
quick(arr,low,pivot-1); //對樞軸值前面的序列排序
document.write(pivot+'<br />');
quick(arr, pivot+1, high); //對樞軸值后面的序列排序
}
//return pivot; //返回樞軸值
return arr; //返回排序后的數(shù)組
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者