本篇博客对js中常见的排序算法作了小结,方便日后的复习。主要为冒泡、选择、插入、快排、堆排、归并这六种排序方法
先贴一张时间复杂度
一、冒泡排序
- 平均时间复杂度O(n²)
- 双层for循环,两两比较相邻元素
function bubbleSort(arr) {
let len = arr.length;
for(let i = 0; i < len; i++) {
for(let j = 0; j < len - 1 - i; j++) {
if(arr[j] > arr[j + 1]) {
// 可以使用tmp交换两个元素,也可以使用下面的es6解构赋值
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
}
}
}
return arr;
}
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
二、选择排序
- 最稳定的排序算法之一,因为无论什么数据进去都是O(n²)的时间复杂度
- 从没有排序的数组中,选择最小的元素放在第一位;再从余下元素中选择最小的元素放在第二位,以此类推。
- n个记录的直接选择排序可经过n-1趟直接选择排序得到有序结果
function selectSort(arr) {
let len = arr.length;
let minIndex, tmp;
for(let i = 0; i < len - 1; i++) {
minIndex = i;
for(let j = i + 1; j < len; j++) {
if(arr[j] < arr[minIndex]) {
minIndex = j;
}
}
// 将i位置放上最小的值
tmp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = tmp;
}
return arr;
}
3、插入排序
- 默认第一个元素已经排好序了,i从1 开始,不断与前面元素比较,如果i小,则将i元素保存,从i-1开始不断往前移动
function insertSort(arr) {
let len = arr.length;
for(let i = 1; i < len; i++) {
if(arr[i] < arr[i-1]) {
let tmp = arr[i];
let p = i - 1;
while(p >= 0 && tmp < arr[p]) {
arr[p+1] = arr[p];
p--;
}
arr[p+1] = tmp;
}
}
}
4、快速排序
- 在平均状况下,排序 n 个项目要 Ο(nlogn) 次比较。在最坏状况下则需要 Ο(n2) 次比较
- 采用分而治之思想,选基准:在数据结构中选择一个元素作为基准(pivot
划分区:参照基准元素值的大小,划分无序区,所有小于基准元素的数据放入一个区间,所有大于基准元素的数据放入另一区间,分区操作结束后,基准元素所处的位置就是最终排序后它应该所处的位置
递归:对初次划分出来的两个无序区间,递归调用第 1步和第 2步的算法,直到所有无序区间都只剩下一个元素为止。
function quickSort(arr) {
if(arr.length <= 1) return arr;
let len = arr.length;
let povitIndex = Math.floor(len / 2);
let povit = arr[povitIndex];
let left = [], right = [];
for(let i = 0; i < len; i++) {
if(i !== povitIndex) {
if(arr[i] <= povit) {
left.push(arr[i]);
}else{
right.push(arr[i]);
}
}
}
return quickSort(left).concat(povit,quickSort(right));
}
1.引入库
代码如下(示例):
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
2.读入数据
代码如下(示例):
data = pd.read_csv(
'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())
该处使用的url网络请求的数据。
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。