• 算法:插入排序


    插入排序的算法分析:(未完)

    可参考的排序算法的博客: http://blog.csdn.net/cjf_iceking/article/details/7916194

     这是剪贴的别人的插入排序的 函数代码。

    #include <iostream>
    #include <string>
    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    
    using namespace std;
    
    void InsertSort(int* pDataArray, int iDataNum)
    {
        for (int i = 1; i < iDataNum; i++)    //从第2个数据开始插入
        {
            int j = 0;
            while (j < i && pDataArray[j] <= pDataArray[i])    //寻找插入的位置
                j++;
    
            if (j < i)    //i位置之前,有比pDataArray[i]大的数,则进行挪动和插入
            {
                int k = i;
                int temp = pDataArray[i];
                while (k > j)    //挪动位置
                {
                    pDataArray[k] = pDataArray[k-1];
                    k--;
                }
                pDataArray[k] = temp;    //插入
            }
        }
    }
    
    int main()
    {
        int n;
    
        int a[200];
        int i;
        cin>>n;
        for(i=0; i<n; i++)
        {
            cin>>a[i];
        }
        InsertSort(a, n);
    
        for(i=0; i<n; i++)
        {
            if(i==n-1)
              cout<<a[i]<<endl;
              else
                cout<<a[i]<<" ";
        }
        return 0;
    }
    

       

             这是我自己的插入函数 模板代码, 待排序数组的数据元素从下标1开始存储,一直存储到下标n。

         这个插入函数会将a[0] 设置成一个监测哨, 这样做的好处是:减少交换次数,减少了运行时间。

         

        

    SDUT 排序

    Time Limit: 1000ms   Memory limit: 32678K  有疑问?点这里^_^

    题目描述

        给你N(N<=100)个数,请你按照从小到大的顺序输出。

    输入

        输入数据第一行是一个正整数N,第二行有N个整数。

    输出

        输出一行,从小到大输出这N个数,中间用空格隔开。

    示例输入

    5
    1 4 3 2 5

    示例输出

    1 2 3 4 5

    //插入排序
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <algorithm>
    using namespace std;
    
    void Insert_sort(int a[], int n)
    {
        int i, j;
        for(i=2; i<=n; i++)
        {
            if( a[i]<a[i-1] )
            {
                a[0]=a[i];
                for(j=i-1; a[0]<a[j]; j--)
                {
                    a[j+1] = a[j];
                }
                a[j+1]=a[0];
            }
        }
    }
    int main()
    {
        int n;
        int i, j;
        int a[100];
    
        while(scanf("%d", &n)!=EOF)
        {
            for(i=1; i<=n; i++)
            {
                scanf("%d", &a[i] );
            }
            Insert_sort(a, n);
            for(j=1; j<=n; j++)
            {
                printf("%d%c", a[j], j==n?'
    ':' ' );
            }
        }
        return 0;
    }
    

                                                                     

                                                                                   HDU 2020 绝对值排序

           

            Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 42143    Accepted Submission(s): 20476


    Problem Description
    输入n(n<=100)个整数,按照绝对值从大到小排序后输出。题目保证对于每一个测试实例,所有的数的绝对值都不相等。
     


    Input
    输入数据有多组,每组占一行,每行的第一个数字为n,接着是n个整数,n=0表示输入数据的结束,不做处理。
     


    Output
    对于每个测试实例,输出排序后的结果,两个数之间用一个空格隔开。每个测试实例占一行。
     


    Sample Input
    3 3 -4 2 4 0 1 2 -3 0
     


    Sample Output
    -4 3 2 -3 2 1 0

     

        算法: 使用结构体,x保留原数值,y保留该数的绝对值。 利用插入排序对结构体元素y进行排序,然后输出 排序后的的结构体的x元素。

          

    //插入排序
    #include <stdio.h>
    #include <math.h>
    #include <string.h>
    #include <stdlib.h>
    
    struct N
    {
        int x;
        int y;
    }a[200];
    
    void Insert_sort( int n)
    {
        int i, j;
        for(i=2; i<=n; i++)
        {
            if( a[i].y>a[i-1].y )
            {
                a[0]=a[i];
                for(j=i-1; a[0].y>a[j].y; j--)
                {
                    a[j+1] = a[j];
                }
                a[j+1]=a[0];
            }
        }
    }
    int main()
    {
        int n, dd;
        int i, j;
    
        while(scanf("%d", &n)!=EOF)
        {
            for(i=1; i<=n; i++)
            {
                scanf("%d", &dd );
                a[i].x = dd;
                a[i].y = abs(dd);
            }
    
            Insert_sort(n);
    
            for(j=1; j<=n; j++)
            {
                printf("%d%c", a[j].x, j==n?'
    ':' ' );
            }
        }
        return 0;
    }
    

          

  • 相关阅读:
    一个奇怪的SystemClock_Config问题解决方法
    Keil5下载STM32库
    Entry point (0x08000000) points to a Thumb instruction but is not a valid Thumb code pointer.
    Error: failed to execute 'C:KeilARMARMCC'的解决办法
    C#委托的介绍(delegate、Action、Func、predicate)
    CopyFromScreen在屏幕缩放情况下需要做处理
    C# CEF 封装UserControl
    一个单js文件也可以运行vue
    vue自学入门-3(vue第一个例子)
    vue自学入门-1(Windows下搭建vue环境)
  • 原文地址:https://www.cnblogs.com/yspworld/p/4049975.html
Copyright © 2020-2023  润新知