美文网首页
经典排序算法——快排和插入排序

经典排序算法——快排和插入排序

作者: 肚皮怪_Sun | 来源:发表于2018-03-30 16:21 被阅读0次

大厂面试的时候经常会问到一些的算法题,前段时间就被要求手写一段快排算法。虽然这些上学的时候有学过,可平时关注的也少,而且很多人都有这种感觉,代码一看就懂,当时以为自己掌握了,可过段时间让自己来写就忘了。
其实归根到底还是没有理解算法的真正思想,只是单纯的跟着别人的思路走,知其然不知所以然,时间一久自然就忘了。

快速排序

快速排序属于拿着元素找位置的算法。思路非常简单明了,首先给第一个元素找到它正确的位置并把它放置其中,此时该元素将原数组分为两半,左半边的元素都小于或等于它,右半边的元素都大于它,对这两个子数组重复刚才的操作,直到子数组中只有一个元素,此时排序完成。

/**
 * @param s
 * @param i 左边界
 * @param j 右边界
 */
public static void quickSort(int[] s, int i, int j) {
    if (i < j) {
        int left = i, right = j, inser = s[i];
        while (left < right) {
            while (left < right && inser < s[right])
                right--;//缩小右边界
            if (left < right) s[left++] = s[right];//缩小左边界

            while (left < right && inser > s[left]) left++;
            if (left < right) s[right--] = s[left];
        }
        s[left] = inser;

        quickSort(s, i, left - 1);
        quickSort(s, left + 1, j);
    }

}
直接插入排序

插入排序的思想,先给定一个排好序的序列,再让后续的值与前面已排好序的值依次比较,如果小于前面的值就插入在前列,一直这样循环的操作后续的值。比如把第一个元素作为有序的值,第二个元素和第一个元素比较,根据比较结果,排序两者的位置使之有序,第三个元素和前两个元素比较,根据排序结果使之有序,直到第N个元素完成排序。

  public static void insetSort(int[] data) {
    for (int i = 1; i < data.length ; i++) {
        int temp = data[i];//从第二个元素开始
        int j = i - 1;

        while (j >= 0 && temp < data[j]) {
            //将data[j]后移
            data[j + 1] = data[j];
            //j的位置前移
            j--;
        }
        data[j + 1] = temp;// 将temp插入到正确的位置
    }
}

相关文章

  • 经典排序算法——快排和插入排序

    大厂面试的时候经常会问到一些的算法题,前段时间就被要求手写一段快排算法。虽然这些上学的时候有学过,可平时关注的也少...

  • 算法-插入排序

    算 法:插入排序算法时间复杂度: 插入排序算法描述 插入排序伪代码 插入排序实现 插入排序算法概述 插入排...

  • PHP算法系列教程(一)-四大排序算法

    PHP算法系列教程(一)-四大排序算法 冒泡 冒泡排序原理图 选择 选择排序原理图 插入 插入排序原理图 快排 快...

  • 数据结构与算法-面试准备

    1、排序 冒泡排序,直接排序,插入排序十大经典排序算法最强总结 - hellozhxy的博客 - CSDN博客 快...

  • 跟JDK学算法之插入排序

    看源码时专门瞄了下排序算法,跟着学一下。JDK的排序是 插入排序、快排揉一起的,先来学下插入排序。在JDK中当待排...

  • 面试点准备

    # 设计模式 单例模式 工厂模式 注册模式 观察者模式 # 排序算法 冒泡排序 插入排序 快排 希尔排序 # PH...

  • 各种排序算法

    排序算法包括很多,常见的有快排,堆排序,冒泡排序,归并排序,选择排序,插入排序等, 各种排序算法经常出现在面试题中...

  • 每天一点算法-直接插入排序 (Day5)

    介绍 前面介绍的冒泡排序和快速排序属于排序算法中的交换排序。今天介绍的直接插入排序则属于插入排序,算法核心是从待排...

  • python 排序算法

    文章概述 介绍各大常用经典的排序算法和效率,以及python实现常用算法(冒泡排序,选择排序,快速排序,插入排序)...

  • 算法与数据结构系列 ( 四 ) - 插入排序法- Insert

    前言 本章我们继续理解另外一个排序算法 插入排序插入排序 也算是我们 O(n^2) 的经典排序算法之一插入排序 其...

网友评论

      本文标题:经典排序算法——快排和插入排序

      本文链接:https://www.haomeiwen.com/subject/lfuicftx.html