三大基本排序专题

//以下依次是冒泡、选择、插入排序

var n,i:longint;
    a:array[0..20] of longint;
procedure BUB;
var i,j,t:longint;
begin
    for i:=1 to n-1 do
        for j:=1 to n-i do
            if a[j]>a[j+1] then begin t:=a[j]; a[j]:=a[j+1]; a[j+1]:=t; end;
end;
procedure SEL;
var i,j,k,t:longint;
begin
    for i:=1 to n-1 do
    begin
        k:=i;
        for j:=i+1 to n do
            if a[j]<a[k] then k:=j;
        t:=a[i]; a[i]:=a[k]; a[k]:=t;
    end;
end;
procedure INS;
var i,j,k,t:longint;
begin
    a[0]:=-2100000000;
    for i:=2 to n do
    begin
        t:=a[i];
        for j:=i-1 downto 0 do
            if a[j]>t then a[j+1]:=a[j] else break;
        a[j+1]:=t;
    end;
end;
begin
    readln(n);
    for i:=1 to n do read(a[i]);
    INS;
    for i:=1 to n-1 do write(a[i],‘ ‘);
    writeln(a[n]);
end.

时间: 2025-01-02 06:49:59

三大基本排序专题的相关文章

三大线性排序之桶排序

一.概念引入 有作者把计数排序也称为桶排序(各个桶中元素的排序采用计数排序),得到数组C后直接从前往后遍历,输出数组值次数组下标,为0就不输出(或者存入原数组,不稳定),不过笔者认为这种说法不严谨(一个很明显的问题是输出会是双重for循环,不过也有那个意思,叫鸽巢排序也未尝不可),因为桶排序要求输入数据在[0,1)范围内(计数排序要求整数:实际上要么全是整数,要么小数,便于划分桶),先把区间[0,1)划分成n个相同大小的子区间,称为桶,然后将n个输入数分布到各个桶中去.因为输入数均匀且独立分布在

排序专题一

1.选择排序 import java.util.Scanner ; public class Selection{ //选择排序 public static void selectionSort(Comparable[] a){ int n = a.length ; for (int i=0;i<n-1;i++) { int min = i ; for (int j=i+1;j<n;j++) { if (less(a[j],a[min])) { min = j ; } } exch(a,i,m

[MOOC笔记]排序专题(数据结构)

1.冒泡排序: 思路:将相邻的逆序元素交换为顺序排列,直到整个序列有序,算法如下: /** * 冒泡排序-最初实现,时间复杂度O(n^2) * @param arr 待排序的数组 * @param lo 待排序区间的起始位置 * @param hi 待排序区间的结束位置 */ public static void bubbleSort(int[] arr, int lo, int hi) { //对序列进行规模n-1次扫描 for (int i = lo; i < hi - 1; i++) {

三大初级排序算法

1.冒泡排序 冒泡排序是最慢的排序算法.在实际运用中它是效率最低的算法.它通过一趟又一趟地比较数组中的每一个元素,使较大的数据下沉,较小的数据上升.它是O(n^2)的算法. 2.插入排序 插入排序通过把序列中的值插入一个已经排序好的序列中,直到该序列的结束. 3.shell排序(希尔排序) Shell排序通过将数据分成不同的组,先对每一组进行排序,然后再对所有的元素进行一次插入排序,以减少数据交换和移动的次数.平均效率是O(nlogn). 下面给出两个关于shell排序的链接: 算法系列15天速

hiho拓扑排序专题 ——第四十八、四十七周

拓扑排序·一 分析: 此题就是求一个有向图中是否存在环. 如存在环则输出"Wrong", 若不存在环, 说明课程安排的合理,输出"Correct". 题中的提示说的已经十分清楚了. 总的来说就是: ① 找出入度为0的点(说明该点没有前驱),把该点放入集合T中. 把所有从该点出发的边都删除: ② 遍历剩余的点, 找出入度为0 的点, 重复①操作. ③直到不存在入度为0的点. 结束.如果此时集合T中包含所有的点, 那么该图不存在环, 否则存在环. 注意:1.执行操作①时

三大基本排序--选择、冒泡、插入

引言: 老师已经是第三次跟我们讲排序了,可想而知排序它的重要性,这三种基本排序的方式值得我们思考和研究,理解其中的思想. 简述: 概念: 将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程叫做排序 常见排序算法: 快速排序.希尔排序.堆排序.直接选择排序不是稳定的排序算法,而基数排序.冒泡排序.直接插入排序.折半插入排序.归并排序是稳定的排序算法. 选择排序: 原理: 将初始序列(A[0]~A[n-1])作为待排序序列,按照从小到大进行排序,假设现在A[0]是最小的,将剩余的元素与其进行

三大经典排序算法之最经典之冒泡排序

排序算法:冒泡排序 冒泡排序的思想:让数组中的当前项和后一项进行比较,如果当前项比后一项大,则两项交换位置(让大的靠后)即可 let ary = [12,8,24,16,1]; 第一轮开始比较: 12>8  交换位置 [8,12,24,16,1] 12<24  不交换位置  [8,12,24,16,1] 24>16  交换位置   [8,12,16,24,1] 24>1  交换位置  [8,12,16,1,24] 第一轮完成后,虽然没有实现出最后的效果,但是当前数组中最大的这个值2

三大高级排序

position:static(静态定位) 当position属性定义为static时,可以将元素定义为静态位置,所谓静态位置就是各个元素在HTML文档流中应有的位置 podisition定位问题.所以当没有定义position属性时,并不说明该元素没有自己的位置,它会遵循默认显示为静态位置,在静态定位状态下无法通过坐标值(top,left,right,bottom)来改变它的位置. position:absolute(绝对定位) 当position属性定义为absolute时,元素会脱离文档流

三大经典排序算法之最经典之快速排序

先做个热身 //递归:函数执行的时候自己调用自己 // function fn(){ // fn(); //Uncaught RangeError: Maximum call stack size exceeded // 这种死递归会导致栈溢出 // } // fn(); // function fn(){ // setTimeout(fn,0);//这种看起来像死递归的方法不会导致栈溢出错误 // } // fn(); //快速递归 function quick(ary){ //4.结束递归(