zoukankan      html  css  js  c++  java
  • 排序算法插入、快排、选择、冒泡、堆排序、归并

    1.插入排序:

    procedure in_sort(var a: array of Integer; k, m: Integer);
    var
    p: Integer;
    begin
    p :
    = 0;
    while p = 0 do
    begin
    if k >= a[m] then
    begin
    a[m
    + 1] := k;
    p :
    = 1;
    end
    else
    begin
    a[m
    + 1] := a[m];
    Dec(m);
    if m = -1 then
    begin
    a[m
    + 1] := k;
    p :
    = 1;
    end;
    end;
    end;
    end;

    2.快速排序:

    procedure q_sort(var a: array of Integer; l, r: Integer);
    var
    i, j, mid, t: Integer;
    begin
    i :
    = l;
    j :
    = r;
    mid :
    = a[(l + r) div 2];
    while i <= j do
    begin
    while (a[i] < mid) do
    Inc(i);
    while (a[j] > mid) do
    Dec(j);
    if i <= j then
    begin
    t :
    = a[i];
    a[i] :
    = a[j];
    a[j] :
    = t;
    Inc(i);
    Dec(j);
    end;
    end;
    if l < j then
    q_sort(a, l, j);
    if i < r then
    q_sort(a, i, r);
    end;

    3.选择排序:

    procedure sel_sort(var a: array of Integer; l, r: Integer);
    var
    i, j, k, t: Integer;
    begin
    for i := l to r do
    begin
    k :
    = i;
    for j := i + 1 to r do
    begin
    if a[j] < a[k] then
    k :
    = j;
    end;
    if k <> i then
    begin
    t :
    = a[k];
    a[k] :
    = a[i];
    a[i] :
    = t;
    end;
    end;
    end;

    4.冒泡排序:

    procedure b_sort(var a: array of Integer; l, r: Integer);
    //l,r表示上下标
    var
    i, j, t: Integer;
    begin
    for i := l to r do
    for j := l to i - 1 do
    begin
    if a[j] > a[i] then
    begin
    t :
    = a[i];
    a[i] :
    = a[j];
    a[j] :
    = t;
    end;
    end;
    end;

    5.堆排序:

    procedure heap_adjust(var a: array of Integer; i, m: Integer);
    var
    k, t: Integer;
    begin
    t :
    = a[i];
    k :
    = i * 2;
    while k <= m do
    begin
    if (a[k] < a[k + 1]) and (k < m) then
    Inc(k);
    if (t < a[k]) then
    begin
    a[i] :
    = a[k];
    i :
    = k;
    k :
    = 2 * i; //调整,并为t在下面节点找位置
    //k向下探索
    end
    else
    k :
    = m + 1;
    end;
    a[i] :
    = t;
    end;
    procedure he_sort(var a: array of Integer; l, r: Integer);
    var
    j, t: Integer;
    begin
    for j := r div 2 to l do
    heap_adjust(a, j, r);
    //调整堆,初始化
    for j := r downto l do
    begin
    t :
    = a[0];
    a[
    0] := a[j];
    a[j] :
    = t;
    heap_adjust(a, l, j
    - 1);
    end;
    end;

    6.归并排序:

    procedure merge(var a: array of Integer; l, q, r: Integer);
    {将已排序好的子序列a[l..p]与a[q+1..r]合并为有序的tmp[l..r]}
    var
    i, j, t: Integer;
    tmp:
    array[0..20] of Integer;
    begin
    i :
    = l;
    j :
    = q + 1;
    t :
    = l;
    while t <= r do
    begin
    if ((i <= q) and (a[i] <= a[j])) or (j > r) then
    begin
    tmp[t] :
    = a[i];
    Inc(i);
    end
    else
    begin
    tmp[t] :
    = a[j];
    Inc(j);
    end;
    Inc(t);
    end;
    for t := l to r do
    a[t] :
    = tmp[t];
    end;
    procedure me_sort(var a: array of Integer; l, r: Integer);
    var
    q: Integer;
    begin
    if l <> r then
    begin
    q :
    = (l + r) div 2;
    me_sort(a, l, q);
    me_sort(a, q
    + 1, r);
    merge(a, l, q, r);
    end;
    end;

      

  • 相关阅读:
    Sketch or Figma谁才是UI设计软件的未来?
    2020年网站首屏设计:最佳实践和例子
    为设计工具付费到底值不值得?
    社交网站原型模板分享
    摹客PS插件,支持自定切图尺寸!
    UI设计适合女生学吗?会不会很难?
    mysql数据操作之单表查询
    表操作
    库操作
    数据库
  • 原文地址:https://www.cnblogs.com/wouldguan/p/2153381.html
Copyright © 2011-2022 走看看