首页 > 编程语言 >面试:排序算法代码实现

面试:排序算法代码实现

时间:2022-11-09 22:56:44浏览次数:38  
标签:temp nums int next 面试 算法 increment 排序

目录

冒泡排序

/*====================冒泡排序=======================*/
void bubble_sort(int nums[], int n)
{
    for (int i = 0; i < n; i++)
    {
        bool has_swapped = false;
        int j = n - 1;
        while (j - 1 >= i)
        {
            if (nums[j - 1] > nums[j])
            {
                swap(nums[j - 1], nums[j]);
                has_swapped = true;
            }
            j--;
        }
        if (!has_swapped)
            break;
    }
}

插入排序

/*==================插入排序=========================*/
void insert_sort(int nums[], int n)
{
    for (int i = 1; i < n; i++)
    {
        int temp = nums[i];
        int j = i;
        while (j - 1 >= 0)
        {
            if (nums[j - 1] > nums[j])
            {
                nums[j] = nums[j - 1];
                j--;
            }
            else
                break;
        }
        nums[j] = temp;
    }
}

希尔排序

/*======================希尔排序==================================*/
void shell_sort(int nums[], int n)
{
    for (int increment = n / 2; increment > 0; increment /= 2)
    {
        for (int i = increment; i < n; i++)
        {
            int temp = nums[i];
            int j = i;
            while (j - increment >= 0)
            {
                if (nums[j - increment] > nums[j])
                {
                    nums[j] = nums[j - increment];
                    j -= increment;
                }
                else
                    break;
            }
            nums[j] = temp;
        }
    }
}

选择排序

/*================选择排序=============================*/
int find_index_of_min(int nums[], int start, int end);
void select_sort(int nums[], int n)
{
    for (int i = 0; i < n; i++)
    {
        int indexOfMin = find_index_of_min(nums, i, n - 1);
        swap(nums[indexOfMin], nums[i]);
    }
}

堆排序

/*================堆排序==========================*/
void perc_down(int nums[], int index, int end)
{
    int temp = nums[index];
    int parent = index;
    while (2 * parent + 1 < end)
    {
        int next = 2 * parent + 1;
        if (next + 1 < end && nums[next + 1] > nums[next])
            next++;
        if (nums[next] > temp)
        {
            nums[parent] = nums[next];
            parent = next;
        }
        else
            break;
    }
    nums[parent] = temp;
}

void heap_sort(int nums[], int n)
{
    //在原数组上建立最大堆
    for (int i = (n - 1 - 1) / 2; i >= 0; i--)
    {
        perc_down(nums, i, n);
    }

    for (int i = n - 1; i >= 0; i--)
    {

        //依次从最大堆中取出最大元素放到原数组正确的位置上
        swap(nums[0], nums[i]);
        //调整最大堆
        perc_down(nums, 0, i);
    }
}

标签:temp,nums,int,next,面试,算法,increment,排序
From: https://www.cnblogs.com/zjuhaohaoxuexi/p/16875519.html

相关文章

  • 实验三:朴素贝叶斯算法实验
    实验三:朴素贝叶斯算法实验20大数据三班博客班级qiao_px学号201613336博客链接【实验目的】理解朴素贝叶斯算法原理,掌握朴素贝叶斯算法框架。【实验内容......
  • 程序员不一定要进大厂,但是算法很重要
    前言数据结构Q与算法是程序员内功体现的重要标准之一,且数据结构也应用在各个方面,业界更有程序-数据结构+算法这个等式存在。各个中间件开发者,架构师Q他们都在努力的优化......
  • git面试题
    1你们公司分支方案是什么样的?我们公司的方案是master+dev+bug三条分支master是总分支,用来大版本的发布dev是我们一般开发用的bug分支是在master发布版本遇到问题是在b......
  • 常见的排序和查找算法
    常见算法常见的七种查找算法:​ 程序=数据结构加算法,数据结构是数据存储的方式,算法是数据计算的方式。所以在开发中,算法和数据结构息息相关。今天会涉及部分数据结构的专......
  • Nginx分发算法实现
    1、基于轮询分发:根据请求流量均匀分发到后端服务器upstreamweb{serverserver1;serverserver2;}server{listen80;server_namelocalhost;......
  • Nginx分发算法介绍
    分发算法:如何将用户请求按照一定的规律分发给业务服务器。主要分为Nginx集群默认算法和基于请求头分发算法。nginx的upstream目前支持4种方式的分配:1)轮询(默认)  每......
  • 快速排序
    快速排序1.复杂度时间复杂度:O(nlogn),最高可达O(n²)空间复杂度:O(nlogn)2.代码实现2.1递归实现#include<iostream>usingnamespacestd;voidswap(int&a,int&b){......
  • 插入排序
     代码实现:   ......
  • [算法经典] 约瑟夫环问题
     原文链接:https://blog.csdn.net/qq_40692274/article/details/124592025【前言】本文讨论经典算法问题约瑟夫环问题的递归解法。 一、问题描述作为算法中的经典问题,......
  • 强化学习代码实战-03动态规划算法(价值迭代)
    #获取一个格子的状态defget_state(row,col):ifrow!=3:return'ground'ifrow==3andcol==11:return'terminal'ifrow==3......