1.排序算法
- 排序算法是一种通过特定的运算规律将一组或多组数据按照既定模式进行重新排序的算法
2.排序算法的作用
- 使用排序算法的主要目的是为了
提高程序效率和提升查找的精准度
- 这有助于提高程序的效率和性能,
减少计算时间和计算资源的使用
3.常见的排序算法
- 常见的排序算法包括
冒泡排序、选择排序、插入排序、归并排序、快速排序、希尔排序、堆排序、计数排序、桶排序、基数排序等。
4.实现冒泡排序
概念
- 冒泡排序(Bubble Sort)是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行,直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
- 这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
原理
- 冒泡排序的原理是通过重复走访要排序的元素列,
依次比较相邻的两个元素,如果顺序错误就进行交换。这个过程会重复进行,直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
代码
var arr = [6,5,7,4,3];
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;
}
}
}
5.实现选择排序
原理
- 在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕
依次找到最小(大)值,放到数组中
代码
var arr = [6, 5, 7, 4, 3];
for (var i = 0; i < arr.length - 1; i++) {
var index = i;
for (var j = i + 1; j < arr.length; j++) {
if (arr[index] > arr[j]) {
index = j;
}
}
var temp = arr[index];
arr[index] = arr[i];
arr[i] = temp;
}
6.实现快速排序
原理
- 通过分治的方式来将一个数组排序。具体来说,它首先要把数列分成两个部分,并保证前一个子数列中的数都小于后一个子数列中的数。这是通过一个称为“基准”的元素来实现的,所有比基准小的元素都被放在基准的前面,所有比基准大的元素都被放在基准的后面(相同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个过程可以递归地应用于两个子数列,直到整个数列完全有序。
步骤
- 选择基准数:选择一个基准数,通常选择第一个元素或者最后一个元素。
- 分割数据:从最左边开始,将小于基准数的元素交换到前面,大于等于基准数的元素交换到后面。这个过程称为分割,完成后基准数就在其排序后的正确位置上。
- 递归排序:然后对分割出来的两个子数组进行同样的分割和排序操作,直到所有子数组的长度为1或0,即所有元素都已经在正确的位置上。
代码
var arr = [6, 5, 7, 4, 3];
function quickSort(arr){
if(arr.length < 2){
return arr;
}
var middleIndex = parseInt(arr.length/2);
var middleVal = arr.splice(middleIndex,1);
var left = [],right = [];
for(var i = 0;i<arr.length;i++){
if(arr[i]>middleVal){
right.push(arr[i]);
}else{
left.push(arr[i]);
}
}
return quickSort(left).concat(middleVal,quickSort(right))
}
console.log(quickSort(arr));