Algorithm for Permutation and Subarray
print all permutations of a given string. A permutation, also called an “arrangement number” or “order,” is a rearrangement of the elements of an ordered list S into a one-to-one correspondence with S itself. A string of length n has n! permutation.
# include <stdio.h>
/* Function to swap values at two pointers */
void
swap (
char
*x,
char
*y)
{
char
temp;
temp = *x;
*x = *y;
*y = temp;
}
/* Function to print permutations of string
This function takes three parameters:
1. String
2. Starting index of the string
3. Ending index of the string. */
void
permute(
char
*a,
int
i,
int
n)
{
int
j;
if
(i == n)
printf
(
"%s\n"
, a);
else
{
for
(j = i; j <= n; j++)
{
swap((a+i), (a+j));
permute(a, i+1, n);
swap((a+i), (a+j));
//backtrack
}
}
}
/* Driver program to test above functions */
int
main()
{
char
a[] =
"ABC"
;
permute(a, 0, 2);
getchar
();
return
0;
}
|
2. find the sum of contiguous subarray within a one-dimensional array of numbers which has the largest sum.
#include<stdio.h>
int
maxSubArraySum(
int
a[],
int
size)
{
int
max_so_far = 0, max_ending_here = 0;
int
i;
for
(i = 0; i < size; i++)
{
max_ending_here = max_ending_here + a[i];
if
(max_ending_here < 0)
max_ending_here = 0;
if
(max_so_far < max_ending_here)
max_so_far = max_ending_here;
}
return
max_so_far;
}
/*Driver program to test maxSubArraySum*/
int
main()
{
int
a[] = {-2, -3, 4, -1, -2, 1, 5, -3};
int
max_sum = maxSubArraySum(a, 8);
printf
(
"Maximum contiguous sum is %d\n"
, max_sum);
getchar
();
return
0;
}
|