• 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");
    }
  • 相关阅读:
    防止论坛用户重复登录的方法 .
    配置Windows服务器支持json文件的方法
    在线修改ServU密码注意问题。
    a href=#与 a href=javascript:void(0) 的区别,以及location.href含义
    使用sql命令连接字符串类型和整型类型的数据
    数据库SQL Server 2005 的级联设置 外键赋值
    使用VS发布网站后遇到的Fill为Null的奇怪错误。
    使用Visual Studio 2005 IDE的宏,自动为c#变量生成属性
    推荐Zen Garden
    使用 aspnet_regsql.exe 向 SQL Express 数据库中注册脚本
  • 原文地址:https://www.cnblogs.com/new0801/p/6176815.html
Copyright © 2020-2023  润新知