一、冒泡排序
原理(由小到大排序): 两两比较相邻的元素,将数值大的元素交换到右边。 算法描述
- 从第一个元素开始,比较第一个元素与第二个元素,如果元素1大于元素2,则交换元素值。
- 继续比较第二个元素与第三个元素,按照同样的规则完成比较,至到比较到最后一个元素。
- 注意:由于每轮比较结束以后,最后一位就是最大值,所以应当相应的减少比较的数量。
代码如下:
let arr = [3,45,16,8,65,36,22,19,1,96,12,56,12,45]
console.log(arr)
let arr_length = arr.length
let temp
for(let i=0;i<arr_length;i++)
for(let j=0;j<arr_length-i;j++){
if(arr[j] > arr[j+1]){
temp = arr[j]
arr[j] = arr[j+1]
arr[j+1] = temp
}
}
console.log(arr)
二、选择排序
原理(由小到大排序): 将序列分为待排序和已排序,从待排序序列中寻找最小的元素,放到已排序序列的末尾。 算法描述
- 第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置。
- 然后再从剩余的未排序元素中寻找到最小(大)元素,放到已排序的序列的末尾。
- 以此类推,直到全部待排序的数据元素的个数为零。
代码如下:
let arr = [3,45,16,8,65,36,22,19,1,96,12,56,12,45]
console.log(arr)
let arr_length = arr.length
let temp
let minIndex = 0
for(let i=0;i<arr_length-1;i++){
minIndex = i
for(let j=i+1;j<arr_length;j++){
if(arr[minIndex] > arr[j]){
minIndex = j
}
}
temp = arr[i]
arr[i] = arr[minIndex]
arr[minIndex] = temp
}
console.log(arr)
三、插入排序
原理(由小到大排序): 对于待排序序列中的元素,每一个与前面已排序序列的最后一个元素开始向前进行比较,找到合适的位置插入。 算法描述
- 假设前面n-1(其中n>=2)个数已经是排好顺序的。
- 现在从待排序的序列中取出元素,在已排序序列中找到合适位置,使之插入第n个数,这个序列也成为已排序好的序列。
- 按照此法对所有元素进行插入,直到整个序列排为有序。
代码如下:
let arr = [3,45,16,8,65,36,22,19,1,96,12,56,12,45]
console.log(arr)
let arr_length = arr.length
let temp
for(let i=1;i<arr_length;i++){
let currentIndex = i
for(let j=i-1;j >= 0;j--){
if(arr[currentIndex] < arr[j]){
temp = arr[currentIndex]
arr[currentIndex] = arr[j]
arr[j] = temp
currentIndex = j
}
}
}
console.log(arr)
四、快速排序
原理(由小到大排序): 以待排序序列的第一个元素为中心点,将序列排列为,在中心点前面的数都比中心点小(或者相等),中心点后面的数都比中心点大(或者相等)。再将中心点前面的序列作为一个待排序序列1,中心点后面的序列作为待排序序列2,按照中心点的方法进一步划分。以此类推,完成排序算法。 算法描述
- 在待排序的数列中,我们首先选择第 1个数字作为基准数(其实选择第几个并没有关系)。
- 接下来把这个待排序的数列中小于基准数的元素移动到待排序的数列的左边,把大于基准数的元素移动到待排序的数列的右边。这时,左右两个分区的元素就相对有序了。
- 接着把两个分区的元素分别按照上面两种方法继续对每个分区找出基准数,然后移动,直到各个分区只有一个数时为止。
代码如下:
function quickSort(arr,left,right){
let tag = arr[left]
let temp
let start = left
let end = right
while(start < end){
while(arr[end]>=tag && end>start)
end--
if(arr[end] <= tag){
temp = arr[end]
arr[end] = arr[start]
arr[start] = temp
}
while(arr[start]<=tag && end>start)
start++
if(arr[start] >= tag){
temp = arr[start]
arr[start] = arr[end]
arr[end] = temp
}
}
if(start > left)
quickSort(arr,left,start-1)
if(end < right)
quickSort(arr,end+1,right)
console.log(arr)
return arr
}
let arr = [3,45,16,8,65,36,22,19,1,96,12,56,12,45]
console.log(arr)
let sortedArr = quickSort(arr,0,arr.length-1)
console.log(sortedArr)
|