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

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

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

冒泡排序

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;
}
相关文章
|
4月前
|
负载均衡 NoSQL 算法
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
这篇文章是关于Java面试中Redis相关问题的笔记,包括Redis事务实现、集群方案、主从复制原理、CAP和BASE理论以及负载均衡算法和类型。
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
|
4月前
|
算法 Go
[go 面试] 雪花算法与分布式ID生成
[go 面试] 雪花算法与分布式ID生成
|
2月前
|
算法 Java 数据库
美团面试:百亿级分片,如何设计基因算法?
40岁老架构师尼恩分享分库分表的基因算法设计,涵盖分片键选择、水平拆分策略及基因法优化查询效率等内容,助力面试者应对大厂技术面试,提高架构设计能力。
美团面试:百亿级分片,如何设计基因算法?
|
2月前
|
算法 Java 数据库
美团面试:百亿级分片,如何设计基因算法?
40岁老架构师尼恩在读者群中分享了关于分库分表的基因算法设计,旨在帮助大家应对一线互联网企业的面试题。文章详细介绍了分库分表的背景、分片键的设计目标和建议,以及基因法的具体应用和优缺点。通过系统化的梳理,帮助读者提升架构、设计和开发水平,顺利通过面试。
美团面试:百亿级分片,如何设计基因算法?
|
2月前
|
算法 Java 数据中心
探讨面试常见问题雪花算法、时钟回拨问题,java中优雅的实现方式
【10月更文挑战第2天】在大数据量系统中,分布式ID生成是一个关键问题。为了保证在分布式环境下生成的ID唯一、有序且高效,业界提出了多种解决方案,其中雪花算法(Snowflake Algorithm)是一种广泛应用的分布式ID生成算法。本文将详细介绍雪花算法的原理、实现及其处理时钟回拨问题的方法,并提供Java代码示例。
92 2
|
3月前
|
机器学习/深度学习 JavaScript 算法
面试中的网红虚拟DOM,你知多少呢?深入解读diff算法
该文章深入探讨了虚拟DOM的概念及其diff算法,解释了虚拟DOM如何最小化实际DOM的更新,以此提升web应用的性能,并详细分析了diff算法的实现机制。
|
4月前
|
消息中间件 存储 算法
这些年背过的面试题——实战算法篇
本文是技术人面试系列实战算法篇,面试中关于实战算法都需要了解哪些内容?一文带你详细了解,欢迎收藏!
|
4月前
|
JavaScript 算法 索引
【Vue面试题二十三】、你了解vue的diff算法吗?说说看
这篇文章深入分析了Vue中的diff算法,解释了其在新旧虚拟DOM节点比较中的工作机制,包括同层节点比较、循环向中间收拢的策略,并通过实例演示了diff算法的执行过程,同时提供了源码层面的解析,说明了当数据变化时,如何通过Watcher触发patch函数来更新DOM。
【Vue面试题二十三】、你了解vue的diff算法吗?说说看
|
4月前
|
算法
聊聊一个面试中经常出现的算法题:组合运算及其实际应用例子
聊聊一个面试中经常出现的算法题:组合运算及其实际应用例子
|
4月前
|
机器学习/深度学习 算法 数据中心
【机器学习】面试问答:PCA算法介绍?PCA算法过程?PCA为什么要中心化处理?PCA为什么要做正交变化?PCA与线性判别分析LDA降维的区别?
本文介绍了主成分分析(PCA)算法,包括PCA的基本概念、算法过程、中心化处理的必要性、正交变换的目的,以及PCA与线性判别分析(LDA)在降维上的区别。
108 4