面试核心精简-各种排序算法(临时抱佛脚系列)

简介: 面试核心精简-各种排序算法(临时抱佛脚系列)

面试官让你手撸代码,那这些基础,你必须掌握

冒泡排序

void swap(int array[], int i, int j)
{
  int temp = array[i];
  array[i] = array[j];
  array[j] = temp;
}
void BubbleSort1(int array[], int n)
{
  for (int i = 0; i < n-1; i++)
  {
    for (int j = i + 1; j < n-1; j++)
    {
      if (array[i]>=array[j])
        swap(array, j, i);
//每次i后面的元素比array[i]小就交换。
    }
  }
}


快速排序

void quickSort(int s[], int l, int r)
{
  if (l< r)
  {      
    int i = l, j = r, x = s[l];
    while (i < j)
    {
      while(i < j && s[j]>= x)
 // 从右向左找第一个小于x的数
        j--; 
      if(i < j)
        s[i++] = s[j];
      while(i < j && s[i]< x) 
// 从左向右找第一个大于等于x的数
        i++; 
      if(i < j)
        s[j--] = s[i];
    }
    s[i] = x;
    quickSort(s, l, i - 1); 
    quickSort(s, i + 1, r); 
  }
}


归并排序

int Mid[Num]={0};
void Merge(int* s,int low,int mid,int up)
{
        int a=low,b=mid+1;
        for(int i=low;i<=up;i++)
                Mid[i]=s[i];
        for(int i=low;i<=up;i++)
        {
                if(a>mid)
                   s[i]=Mid[b++];
                else if(b>up)
                   s[i]=Mid[a++];
                else if(Mid[a]<=Mid[b])
                   s[i]=Mid[a++];
                else 
s[i]=Mid[b++];
        }
}
int Sort(int* s,int low,int up)//归并排序
{
       if(up<=low)
                return 0;
       else
       {
               int mid=(low+up)/2;
               Sort(s,low,mid);
               Sort(s,mid+1,up);
               Merge(s,low,mid,up);
       }
}


单词翻转

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<iomanip>
#include<algorithm> 
using namespace std;
int main(){
  string s1;int k=0;
  getline(cin,s1);
  s1 = s1+" ";
  int len = s1.length();
  for(int i=0;i<len;i++){
    if(s1[i]==' '){
      for(int j=i-1;j>=k;j--){
        cout<<s1[j];
      }
      cout<<" ";
      k=i+1;
    }
  }
  return 0;
}


链表翻转

struct node{
    int content;
    node *next;
};
node* ReverseList(node* phead) 
{
    node *pre = NULL, *cur = phead, *next = NULL;
    while (cur->next)
    {
        next = cur->next;
        cur->next = pre;
        pre = cur;
        cur = next;
    }
    cur->next = pre;
    return cur;
}


二分查找(精确查找)

int find(vector<int>& nums, int target) {
    int left = 0, right = nums.size();
    while (left < right) {
        int mid = left + (right - left) / 2;
        if (nums[mid] == target) 
return mid;
        else if (nums[mid] < target) 
left = mid + 1;
        else right = mid;
    }
    return -1;
}


二分查找(小于查找)

int find(vector<int>& nums, int target) {
    int left = 0, right = nums.size();
    while (left < right) {
        int mid = left + (right - left) / 2;
        if (nums[mid] < target) 
left = mid + 1;
        else right = mid;
    }
    return right;
}


二分查找(大于查找)

int find(vector<int>& nums, int target) {
    int left = 0, right = nums.size();
    while (left < right) {
        int mid = left + (right - left) / 2;
        if (nums[mid] <= target) 
left = mid + 1;
        else right = mid;
    }
    return right;
}
相关文章
|
29天前
|
负载均衡 NoSQL 算法
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
这篇文章是关于Java面试中Redis相关问题的笔记,包括Redis事务实现、集群方案、主从复制原理、CAP和BASE理论以及负载均衡算法和类型。
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
|
1月前
|
算法 Go
[go 面试] 雪花算法与分布式ID生成
[go 面试] 雪花算法与分布式ID生成
|
23天前
|
JavaScript 算法 索引
【Vue面试题二十三】、你了解vue的diff算法吗?说说看
这篇文章深入分析了Vue中的diff算法,解释了其在新旧虚拟DOM节点比较中的工作机制,包括同层节点比较、循环向中间收拢的策略,并通过实例演示了diff算法的执行过程,同时提供了源码层面的解析,说明了当数据变化时,如何通过Watcher触发patch函数来更新DOM。
【Vue面试题二十三】、你了解vue的diff算法吗?说说看
|
27天前
|
算法
聊聊一个面试中经常出现的算法题:组合运算及其实际应用例子
聊聊一个面试中经常出现的算法题:组合运算及其实际应用例子
|
1月前
|
机器学习/深度学习 算法 数据中心
【机器学习】面试问答:PCA算法介绍?PCA算法过程?PCA为什么要中心化处理?PCA为什么要做正交变化?PCA与线性判别分析LDA降维的区别?
本文介绍了主成分分析(PCA)算法,包括PCA的基本概念、算法过程、中心化处理的必要性、正交变换的目的,以及PCA与线性判别分析(LDA)在降维上的区别。
41 4
|
1月前
|
算法
突击面试:解密面试官的算法题集合
突击面试:解密面试官的算法题集合
|
23天前
|
消息中间件 存储 算法
这些年背过的面试题——实战算法篇
本文是技术人面试系列实战算法篇,面试中关于实战算法都需要了解哪些内容?一文带你详细了解,欢迎收藏!
|
1月前
|
算法
分享几道大厂面试算法题
分享几道大厂面试算法题
|
2月前
|
算法 Java
Java面试题:解释垃圾回收中的标记-清除、复制、标记-压缩算法的工作原理
Java面试题:解释垃圾回收中的标记-清除、复制、标记-压缩算法的工作原理
39 1
|
3月前
|
消息中间件 算法 Java
抖音面试:说说延迟任务的调度算法?
Netty 框架是以性能著称的框架,因此在它的框架中使用了大量提升性能的机制,例如 Netty 用于实现延迟队列的时间轮调度算法就是一个典型的例子。使用时间轮调度算法可以实现海量任务新增和取消任务的时间度为 O(1),那么什么是时间轮调度算法呢?接下来我们一起来看。 ## 1.延迟任务实现 在 Netty 中,我们需要使用 HashedWheelTimer 类来实现延迟任务,例如以下代码: ```java public class DelayTaskExample { public static void main(String[] args) { System.ou
40 5
抖音面试:说说延迟任务的调度算法?