• 20160213.CCPP体系详解(0023天)


    程序片段(01):全排列.c
    内容概要:全排列密码库

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <stdlib.h>
    
    //01.对于字符类型的数组进行初始化特点:
    //  如果赋予的数据是字符串,则可以省略掉大括号
    //注:性能+最优
    int main01(void)
    {
        char arr[10] = "11111";
        for (char * p = arr; 0 != *p; ++p)
        {
            putchar(*p);
        }
    
        system("pause");
    }
    
    //02.凡是涉及到跨函数修改数据:
    //  注:必须传递变量的所属地址!
    void swop(char * pa, char * pb)
    {
        char temp = *pa;
        *pa = *pb;
        *pb = temp;
    }
    
    //03.全局变量的使用:
    //  导致:每次操作的都是同一个变量!
    int ipos = 0;
    char srcStr[5] = "1234";
    void allArange(char * pBegin)
    {
        if ('' == *pBegin)
        {
            printf("第%2d次排列,排列结果为%4s! 
    ", ++ipos, srcStr);
            char resPath[100] = { 0 };
            sprintf(resPath, "echo %s >> E:\Resource\TestData\Test\allArange.txt", srcStr);
            system(resPath);                                        
        }
        for (char * p = pBegin; '' != *p; ++p)
        {
            swop(pBegin, p);
            allArange(pBegin + 1);
            swop(p, pBegin);
        }
    }
    
    int main(void)
    {
        allArange(srcStr);
    
        system("pause");
    }

    程序片段(02):快速排序法
    内容概要:快速排序法

    #include <stdio.h>
    #include <stdlib.h>
    
    void swop(int * pa, int * pb)
    {
        int temp = *pa;
        *pa = *pb;
        *pb = temp;
    }
    
    void show(int * arr, int n)
    {
        for (int i = 0; i < n; ++i)
        {
            printf("%3d", arr[i]);
        }
        printf("
    ");
    }
    
    //01.快速排序:
    //  用途:单线程整体数据排序最快!
    void quick(int * arr, int leftIndex, int rightIndex)
    {
        int i = leftIndex;
        int j = rightIndex + 1;
        if (i < j)//保证索引正确!+排除第一次异常!
        {
            do
            {
                do
                {
                    ++i;//跳过待中立的数组元素
                } while (i <= rightIndex && arr[i] <= arr[leftIndex]);//找到从左边开始的第一个小于或等于数组首元素的的数组元素
                do
                {
                    --j;//进入到真实的数组元素
                } while (j > leftIndex && arr[j] >= arr[leftIndex]);//找到从右边开始的第一个大于或等于首元素的数组元素
                if (i < j)
                {
                    swop(&arr[i], &arr[j]);//交换(最靠左边的第一个小于值和最靠右边的第一个的大于值)!
                }
            } while (i < j);//一轮交换完毕!
            swop(&arr[leftIndex], &arr[j]);
            quick(arr, leftIndex, j - 1);
            quick(arr, j + 1, rightIndex);
        }
    }
    
    int main01(void)
    {
        int arr[10] = { 10, 9, 20, 19, 13, 8, 9, 22, 0, 91 };
        printf("数组原始状态: 
    ");
        show(arr, 10);
        quick(arr, 0, 9);
        printf("数组排序之后: 
    ");
        show(arr, 10);
    
        system("pause");
    }
  • 相关阅读:
    Solidworks草图或者特征无法删除怎么办
    Solidworks如何为装配体绘制剖面视图
    Solidworks如何在装配图中保存单独的一个零件
    [Algorithm] Check if a binary tree is binary search tree or not
    [PureScript] Break up Expressions into Cases in PureScript using Simple Pattern Matching
    [Docker] Hooking a Volume to Node.js Source Code
    [PureScript] Basic Data Constructors in PureScript
    [Algorithm] Check for balanced parentheses using stack
    [PureScript] Introduce to PureScript Specify Function Arguments
    [Node.js] process.nextTick for converting sync to async
  • 原文地址:https://www.cnblogs.com/new0801/p/6176815.html
Copyright © 2020-2023  润新知