Complexidade do espaço [espaço]: O (1), apenas troca elementos no espaço da matriz original.
Método de classificação [Espaço]: classificação interna
Estabilidade [Espaço]: Instável (como [5 a , 8,5 b , 2,9], após a primeira rodada de seleção e troca, é [2,8,5 b , 5 a , 9], dois 5s estão em ordem Alterado).
O melhor caso [tempo]: O (n), que ocorre quando o próprio array é ordenado e cada elemento (exceto o primeiro elemento) é inserido mais de uma vez.
Pior caso [tempo]: O (n 2 ), que ocorre quando a própria matriz está desordenada.
Complexidade do espaço [espaço]: O (1), apenas troca elementos no espaço da matriz original.
Método de classificação [Espaço]: classificação interna
Estabilidade [Espaço]: Estável
Quatro: Hill sort
Compreensão de filme
Código
functionshellSort(arr){
let gap = Math.floor(arr.length/2);while(gap>=1){
for(let i=gap;i<arr.length;i++){
shellSortHelp(arr,i,gap);}
gap = Math.floor(gap/2);}}// 在当前增量为gap的分组情况下,把索引为i的元素插入至正确位置。functionshellSortHelp(arr,i,gap){
let insert_index = i;let insert_ele = arr[i];// 找到插入位置(间隔为gap)for(let j=i-gap;j>=0;j=j-gap){
// 交换的不是相邻索引处的元素,所以不稳定if(insert_ele<arr[j]){
insert_index = j;}else{
break}}// 腾出插入位置for(let z=i-gap;z>=insert_index;z=z-gap){
arr[z+gap]= arr[z];}
arr[insert_index]= insert_ele;}
Análise de Algoritmos
Complexidade de tempo médio [tempo]: O (nlog2 n)
Melhor caso [tempo]: O (nlog2 n)
Pior caso [tempo]: O (nlog2 n)
Complexidade do espaço [espaço]: O (1), apenas troca elementos no espaço da matriz original.
Método de classificação [Espaço]: classificação interna
Estabilidade [Espaço]: Instável (como [5 a , 5 b , 2, 9], após a primeira troca de pacotes ser [2 , 5 b , 5 a , 9], a segunda sequência de pacotes permanece inalterada, dois A ordem de 5 mudou)
Cinco: mesclar classificação
Compreensão de filme
Código
functionmergeSort(arr,left,right){
if(left<right){
// 1.分治分组时,索引中值二分let center = Math.floor((left+right)/2)// 左分mergeSort(arr,left,center)// 右分mergeSort(arr,center+1,right)// 左右合一mergeSortHelp(arr,left,right,center)}}functionmergeSortHelp(arr,left,right,center){
let pointer_left = left
let pointer_right = center+1let arr_copy = arr.slice()// 借用到拷贝数组,空间复杂度O(n)for(let i=left;i<=right;i++){
if(pointer_left===center+1){
for(let j=i;j<=right;j++){
arr[j]= arr_copy[pointer_right++]}break}elseif(pointer_right===right+1){
for(let j=i;j<=right;j++){
arr[j]= arr_copy[pointer_left++]}break}// 2.合并比较时,先判断取左边数组元素,结合1判断 归并排序稳定elseif(arr_copy[pointer_left]<=arr_copy[pointer_right]){
arr[i]= arr_copy[pointer_left++]}else{
arr[i]= arr_copy[pointer_right++]}}}
Análise de Algoritmos
Complexidade de tempo médio [tempo]: O (nlogn)
Melhor caso [tempo]: O (nlogn)
Pior caso [tempo]: O (nlogn)
Complexidade do espaço [Espaço]: O (n), será usada a matriz de cópia.
Método de classificação [espaço]: classificação externa
Método de classificação [Espaço]: classificação interna
Estabilidade [Espaço]: Instável (o valor médio da lógica do índice é dicotomia)
Sete: classificação de heap
Compreensão de filme
Código
// 1.堆排序let len =0// heapSort和heapAdjust方法共享。functionheapSort(arr){
buildMaxHelp(arr)for(let i=arr.length-1;i>0;i--){
swap(arr,0,i)
len--heapAdjust(arr,0)}}// 2.构建大顶堆functionbuildMaxHelp(arr){
len = arr.length
// 堆数组:索引为[0,Math.floor(arr.length)-1]的为非叶子结点。for(let i=Math.floor(arr.length/2)-1;i>=0;i--){
heapAdjust(arr,i)}}// 3.堆调整:调整为以arr[i]为堆顶的堆为大顶堆functionheapAdjust(arr,i){
let left =2*i+1let right =2*i+2let largest = i// 最大元素的索引指针if(right<len && arr[right]>arr[largest]){
// 排序已提出的元素不参与构建堆,此处len不能为arr.length
largest = right
}if(left<len && arr[left]>arr[largest]){
largest = left
}if(largest!=i){
swap(arr,i,largest)heapAdjust(arr,largest)// 堆变化后,递归调整子堆}}// 4.元素交换functionswap(arr,i,j){
let temp = arr[i]
arr[i]= arr[j]
arr[j]= temp
}
Perguntas do teste escrito Tencent: números não ordenados e não repetidos, retire o K-ésimo maior número (retire o k-ésimo menor número com uma pequena pilha no topo).
Complexidade de tempo médio [tempo]: O (n + k). (N = arr.length, k = bucket.length)
Melhor caso [tempo]: O (n + k)
Pior caso [tempo]: O (n + k)
Complexidade do espaço [espaço]: O (k)
Método de classificação [espaço]: classificação externa
Estabilidade [Espaço]: Estável (a classificação de contagem não é baseada na comparação de elementos e a estabilidade aqui não se refere ao código de classificação de contagem não otimizado acima).