• 全排序的理解


        全排序:是对数列所有排列结果的运算,对于一个长度为n的数列来说,它的排列有n!种。

    我的理解是从数列的开头进行固定,每次向后固定元素,遍历到结尾的时候代表一种排列的可能,然后返回上一层,切换下一个数字继续深入排序

    例如: 1 2 3 4 ,固定 1 2  ,最后先以三开头,遍历到结尾打印,返回上一层,以4开头打印,再返回2所在的那一层,分别以 3 4开头进行遍历打印

    最后返回到1所在的那层 ,分别切换成2 3 4 开头进行上述遍历

      

    #include<stdio.h>
    
    void swap(int* a, int* b)
    {
        int tmp = *a;
        *a = *b;
        *b = tmp;
    }
    
    void Perm(int arr[],int lo,int hi)
    {
        if (lo == hi)//递归到最深层,打印这次的排列结果,然后返回上一层进行循环,继续交换,继续递归
        {
            for (int j = 0; j <=hi; j++)
            {
                printf("%d", arr[j]);
            }
            printf("
    ");
        }
    
        //改良,运算更快,但是打印会慢一点
        //Perm(arr,lo+1,hi);
        /*for (int i = lo+1; i <= hi; i++)
        {
            swap(&arr[i], &arr[lo]);//lo是固定的那个位置,与下一个位置交换。
            Perm(arr, lo + 1, hi);
            swap(&arr[i],&arr[lo]); //恢复先前的交换,防止数列顺序改变
        }*/
        for (int i = lo; i <= hi; i++)
        {
            swap(&arr[i], &arr[lo]);//lo是固定的那个位置,与下一个位置交换。
            Perm(arr, lo + 1, hi);
            swap(&arr[i],&arr[lo]); //恢复先前的交换,防止数列顺序改变
        }
    
    
    }
    
    
    int main()
    {
        int arr[4] = { 1,2,3 ,4};
        Perm(arr, 0, 3);
        return 0;
    }
    //改良版
    #include<stdio.h> void swap(int* a, int* b) { int tmp = *a; *a = *b; *b = tmp; } void Perm(int arr[],int lo,int hi) { if (lo == hi)//递归到最深层,打印这次的排列结果,然后返回上一层进行循环,继续交换,继续递归 { for (int j = 0; j <=hi; j++) { printf("%d", arr[j]); } printf(" "); } //改良,运算更快,但是打印会慢一点 Perm(arr,lo+1,hi); for (int i = lo+1; i <= hi; i++) { swap(&arr[i], &arr[lo]);//lo是固定的那个位置,与下一个位置交换。 Perm(arr, lo + 1, hi); swap(&arr[i],&arr[lo]); //恢复先前的交换,防止数列顺序改变 } } int main() { int arr[4] = { 1,2,3 ,4}; Perm(arr, 0, 3); return 0; }
  • 相关阅读:
    Java常用API(Arrays类)
    Java常用API(String类)
    Java常用API(Random类)
    Java匿名对象介绍
    Qt串口实现921600波特率的方法
    Qthread实现多线程操作
    小品QIODevice::Text参数
    Qt串口通信
    Linux下挂载新的磁盘
    互斥锁陷阱:优先级反转、死锁
  • 原文地址:https://www.cnblogs.com/zongji/p/13321096.html
Copyright © 2020-2023  润新知