美文网首页
ReStart Code

ReStart Code

作者: 三月黄橙 | 来源:发表于2018-05-31 17:28 被阅读0次

    Zero.基础代码

    主函数部分

    • 代码

    void solve()
    {
        int a[MAX], n;
        scanf("%d", &n);
        for (int i = 0; i < n; i++) scanf("%d", &a[i]);
        InsertSort(a, n);
        for (int i = 0; i < n; i++)
        {
            printf("%d ", a[i]);
        }
    }
    int main()
    {
        solve();
        return 0;
    }
    

    First.直接插入排序

    1. 对数组进行主遍历,寻找非顺序元素;
    2. 标记非顺序元素,对该元素之前的所有元素进行次级遍历,并进行比较,如果大于标记元素则将该元素后移,否则将标记元素置于该元素之后;
    3. 重复1.步骤直到主遍历到达数组末尾,结束;
    • 代码

    void InsertSort(int a[], int n)//InserSort Code Core
    {
        for (int i = 0; i < n - 1; i++)
        {
            if (a[i + 1] < a[i])
            {
                int x = a[i + 1];
                int j = i;
                while (x < a[j])
                {
                    a[j + 1] = a[j];
                    j--;
                }
                a[j + 1] = x;
            }
        }
    }
    

    Second.希尔排序

    1. 取一个增量为数组长度的一半;
    2. 以该增量为步长,对数组进行进行主遍历,寻找非顺序元素;
    3. 标记非顺序元素,对该元素之前且步长可达的所有元素进行次级遍历,并进行比较,如果大于标记元素则将该元素后移至一步之后,否则将标记元素置于该元素之后一步的地方(“一步”意味距离一步长的位置);
    4. 重复2.步骤直到主遍历到达数组末尾;
    5. 令新增量为原增量一半,重复1.2.3.步骤直到增量为0,结束;
    • 代码

    void ShellInsert(int a[], int n, int ad)//Like InsertSort
    {
        for (int i = 0; i < n - ad; i++)
        {
            if (a[i + ad] < a[i])
            {
                int x = a[i + ad];
                int j = i;
                while (x < a[j])
                {
                    a[j + ad] = a[j];
                    j -= ad;
                }
                a[j + ad] = x;
            }
        }
    }
    void ShellSort(int a[], int n)//ShellSort Code Core
    {
        int ad = n / 2;
        while (ad)
        {
            ShellInsert(a, n, ad);
            ad /= 2;
        }
    }
    

    Third.选择排序

    1. 对数组进行主遍历,对每一个元素进行操作;
    2. 对该元素之后的所有元素进行遍历,并标记这些元素中的最大元素;
    3. 交换主遍历访问的元素和标记元素;
    4. 重复1.2.步骤直到主遍历到达数组末尾,结束;
    • 代码

    void SelectSort(int a[], int n)//SelectSort Code Core
    {
        for (int i = 0; i < n;i++)
        {
            int index = i;
            int min = a[i];
            for (int j = i + 1; j < n;j++)
            {
                if (a[j] < min)
                {
                    min = a[j];
                    index = j;
                }
            }
            int temp = a[i];
            a[i] = a[index];
            a[index] = temp;
        }
    }
    

    相关文章

      网友评论

          本文标题:ReStart Code

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