美文网首页
简单排序算法

简单排序算法

作者: zxRay | 来源:发表于2023-12-26 14:54 被阅读0次

选择排序

选择排序的一次遍历是选择一个最大的元素然后跟最后一个元素交换。

void selectionSort(int a[]) {
   if(a == null || a.length <= 1) return ;
   int n = a.length;
   // i=0 就不需要再比较了,已经有序了
   for(int i = n - 1; i > 0; i--) {
      int maxIdx = i;
      for(int j = 0; j <= i;  j++) {
          if(a[j] > a[maxIdx]) {
             maxIdx = j;
          }
      }
      int temp = a[maxIdx];
      a[maxIdx] = a[i];
      a[i] = temp;
   }
}

冒泡排序

冒泡排序跟选择排序类似,每次也是将最大的元素放置到最后一个元素。跟选择排序不同的是,冒泡每次都是两两比较,如果前者比后者大就交换,那么一次遍历完成后最大的元素就在数组的最后一个位置。

void bubbleSort(int a[]) {
  if(a == null || a.length <= 1) return;
  int n = a.length;
  for(int i = 0; i < n - 1; i++) {
      for(int j = 0; j < n - 1 - i; j++) {
          if(a[j] > a[j + 1]) {
             int tmp = a[j];
            a[j] = a[j + 1];
            a[j + 1] = tmp;
          }
      }
  }
}

插入排序

插入排序的思想是将一个数字插入到一个有序列表。如5, 3, 1进行排序。

  1. 首先认为第一个元素5是一个有序列表,考虑将1插入这个有序列表中。53交换即可==> 3,5
  2. 然后将1插入到3,5这个有序列表中。首先5,1交换==>3,1,5,然后3,1交换==>1,3,5
static void insertSort(int a[]) {
    if(a == null || a.length <= 1) return;
        int n = a.length;
        for(int i = 1; i < n; i++) {
            for(int j = i - 1; j >= 0 && a[j] > a[j + 1]; j--) {
                int temp = a[j];
                a[j] = a[j + 1];
                a[j + 1] = temp;
            }
        }
 }

希尔排序

希尔排序是插入排序改进版本。参考:https://www.runoob.com/data-structures/shell-sort.html

  static void shellSort(int a[]) {
        if(a == null || a.length <= 1) return;
        int n = a.length;
        for(int gap = n / 2; gap > 0; gap/=2) {
            for(int i = gap; i < n; i++) {
                for(int j = i - gap; j >= 0 && a[j] > a[j + gap]; j-=gap) {
                    int temp = a[j];
                    a[j] = a[j + gap];
                    a[j + gap] = temp;
                }
            }
        }
    }

相关文章

  • 算法与数据结构(二):排序篇-O(n^2)算法:选择 &

    排序基础 O(n^2)的算法虽然简单,但也实用!让我们从最简单的基础排序算法开始,打开我们的算法大门! 排序算法 ...

  • 简单排序(选择排序、起泡排序和插入排序)使用详解

    简单排序算法 简单排序算法是一类算法,指那些直观、易理解的排序算法的总和。 到现在为止,我们已经讲了的三种排序算法...

  • 浅谈排序算法

    排序算法有很多种,今天先谈谈一些简单的排序算法。包括桶排序、冒泡排序和快速排序算法。后期总结各种排序算法。 桶排序...

  • 排序算法(四)选择排序

    排序算法(四)选择排序 1.算法思路  选择排序(Selection-Sort)是一种简单直观的排序算法。它的工作...

  • 2018-04-03 排序算法

    8种排序算法:按照时间复杂度分为两类 简单排序算法:冒泡排序,选择排序,直接插入排序 改进算法:希尔排序,堆排序,...

  • 插入排序算法实现

    排序算法是最常见,最基础的算法,作者文集中记录了两种排序算法(插入排序,归并排序) 插入排序算法实现很简单直接,附...

  • 选择排序算法

    一、选择排序算法 选择排序(Selection sort)是一种简单直观的排序算法。 二、算法思想 每一次从待排序...

  • 经典算法---排序(摘抄)

    一、排序算法 前言:常见排序算法分类 非线性时间比较类排序:交换类排序(快速排序和冒泡排序)、插入类排序(简单插入...

  • 冒泡排序算法

    冒泡排序(Bubble Sort)算法是所有排序算法中最简单、最基本的一种。冒泡排序算法的思路就是交换排序,通过相...

  • 排序基础(一)

    排序算法 O(n2)的排序算法 为什么要学习O(n2)的排序算法? 基础 编码简单,易于实现,是一些简单场景的首选...

网友评论

      本文标题:简单排序算法

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