下面是排列算法实现,并且按照字典序进行输出,效率可能存在问题,大家可以优化指正!
#include<stdio.h>
int g_count = 0;
void swap(int*p1, int*p2)
{
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
//begin开始的索引
//新的size为size-begin
void changeOrder2(int begin, int array[], int size)
{
for (int i = 0; i < size - begin - 1; i++) //
{
for (int j = begin; j < size - i - 1; j++)
{
if (array[j]>array[j + 1])
{
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
//按照字典序打印
void FullPrePermutation(int index, int array[], int size)
{
if (index == size)
{
for (int j = 0; j < size; j++)
{
printf("%d ", array[j]);
}
g_count++;
printf("\n");
}
else
{
for (int i = index; i < size; i++)//优化
{
if (i == index)
{
changeOrder2(index, array, size);//之前的话对所用的进行排列
FullPrePermutation(index + 1, array, size);
}
else
{
changeOrder2(index, array, size);
swap(&array[index], &array[i]);
FullPrePermutation(index + 1, array, size);
swap(&array[index], &array[i]);
}
}
}
}
int main()
{
int array[5] = { 1, 2, 3, 4, 5 };
FullPrePermutation(0, array, 5);
return 0;
}