zoukankan      html  css  js  c++  java
  • 插入排序--C++

    /*算法过程:
        从大小为1的子数组A[1]开始,根据A[2]比A[1]小或大,将A[2]插入到A[1]的前面或后面。
        在第i次执行中,要将A[i]插入到已排序的子数组A[1...i-1]中的合适位置上,其进行过程:
        依次扫描序号从i-1到1的元素,每次都将A[i]和当前位置的元素比较。在扫描的每一步,元素都被移到序号更高的一个位置,
        这种执行比较和移位的扫描过程直到以下情况出现时为止:或者找到一个小于等于A[i]的元素,或者前面已排序数组的元素都已扫描过。
        在这种情况下,A[i]已被插到合适的位置,插入A[i]的过程就完成了。
    */
    /*
    输入:n个元素的数组A[1..n]
    输出:按非降序排列的数组A[1...n]
    for i <- 2 to n
        x <- A[i]
        j <- i-1
        while (j > 0) and (A[j] > x)
            A[j+1] <- A[j]
            j <- j-1
        end while
        A[j+1] <- x
    end for 
    */
    
    #include<iostream>
    using namespace std;
    /*
    void swap(int &a, int &b)
    {
        int temp = a;
        a = b;
        b = temp;
    }
    */
    void insertSort(int *A, int n)
    {
        int key;
        for (int i = 1; i < n; i++)  //控制循环次数
        {
            key = A[i];  //待排序的第一个元素
            int j = i - 1;  //已排序的元素的最后一个索引数
            while(j >= 0 && key < A[j])  
            {
                A[j+1] = A[j];
                j--;
            }
            A[j+1] = key;  //找到了合适的位置就赋值在j索引后面
            
            /*简洁版本
            for (int j = i - 1; j >= 0 && A[j+1] < A[j]; j--)
                swap(A[j], A[j+1]);
            */
            
            /*测试
            cout << "第" << i <<"趟排序: ";
            for (int l = 0; l < n; l++)
                cout << A[l] << " ";
            cout << endl;
            */
        }
    }
    
    int main()
    {
        //int A[10] = {20,3,6,1,87,46,12,5,2,11};
        int A[5] = {20,3,6,1,87};
        cout << "before sort: ";
        for (int i = 0; i < 5; i++)
            cout << A[i] << " ";
        cout << endl;
        insertSort(A, 5);
        cout << "after sort: ";
        for (int j = 0; j < 5; j++)
        {
            cout << A[j] << " ";
        }
        cout << endl;
        return 0;
    }

    运行结果:

  • 相关阅读:
    SPU和SKU有什么区别
    Mave手动安装jar包
    maven国内镜像(国内oschina的maven服务器关了)
    用java代码将从数据库中取出的具有父子关系的数据转成json格式
    Oracle中的decode()函数
    Oracle中的instr()函数
    Oracle的nvl
    Oracle保留小数点后两位的几种方法
    【Python】djangorestframework 基于django框架的接口开发
    【MySQL】 GTID使用
  • 原文地址:https://www.cnblogs.com/harbin-ho/p/12659625.html
Copyright © 2011-2022 走看看