#include <stdio.h>
#include <stdbool.h>
void swap( int * arr, int indexOne, int indexTwo) {
if ( arr!= NULL) {
int tmp = arr[ indexOne] ;
arr[ indexOne] = arr[ indexTwo] ;
arr[ indexTwo] = tmp;
}
}
void displayArray( int * arr, int len) {
if ( arr!= NULL) {
for ( int i = 0 ; i < len; ++ i) {
}
}
}
void selectionSort( int * arr, int len) {
if ( arr!= NULL) {
for ( int i = 0 ; i < ( len- 1 ) ; ++ i) {
int minIndex = i;
int minValue = arr[ i] ;
//Iterate thru right subarray and find the smallest value
for ( int j = ( i+ 1 ) ; j < len; ++ j) {
if ( arr[ j] < minValue) {
minIndex = j;
minValue = arr[ j] ;
}
}
if ( minIndex!= i) {
//Swap current value
swap( arr, i, minIndex) ;
}
}
}
}
void insertionSort( int * arr, int len) {
for ( int i = 1 ; i < len; ++ i) {
int key = arr[ i] ;
int j = ( i- 1 ) ;
//Iterate thru left subarray and find the correct position for insertion
while ( ( j>= 0 ) && ( arr[ j] > key) ) {
arr[ j+ 1 ] = arr[ j] ;
-- j;
}
arr[ j+ 1 ] = key;
}
}
bool isPalindrome( char * word, int len) {
bool isPalindrome = true ;
if ( word!= NULL) {
for ( int i= 0 ; i< ( len/ 2 ) ; ++ i) {
int end = ( len- i) - 1 ;
//Determine if the characters at the opposite ends of the string are
//equal
if ( word[ i] != word[ end] ) {
isPalindrome = false ;
break ;
}
}
}
return isPalindrome;
}
bool isPalindrome2( char * word, int len) {
//String is less than or equal to a single character
if ( len<= 1 ) {
return true ;
}
//Compare first and last characters
if ( word[ 0 ] != word[ len- 1 ] ) {
return false ;
}
return isPalindrome2( word + 1 , ( len- 2 ) ) ;
}
int main( ) {
int arr[ ] = { 56 , 0 , - 2 , 10 , - 3 , 1 } ;
int len = sizeof ( arr) / sizeof ( int ) ;
//Expected: -3, -2, 0, 1, 10, 56
selectionSort( arr, len) ;
displayArray( arr, len) ;
int arr2[ ] = { 70 , 100 , 3 , 4 , - 9 , 1 , 5 } ;
int len2 = sizeof ( arr2) / sizeof ( int ) ;
//Expected: -9, 1, 3, 4, 5, 6, 100
insertionSort( arr2, len2) ;
displayArray( arr2, len2) ;
printf ( "Is '%s' a palindrome: %s\n " , "a" , isPalindrome
( "a" , 1 ) ? "true" : "false" ) ; printf ( "Is '%s' a palindrome: %s\n " , "motor" , isPalindrome
( "motor" , 5 ) ? "true" : "false" ) ; printf ( "Is '%s' a palindrome: %s\n " , "rotor" , isPalindrome
( "rotor" , 5 ) ? "true" : "false" ) ; printf ( "Is '%s' a palindrome: %s\n " , "civic" , isPalindrome
( "civic" , 5 ) ? "true" : "false" ) ; printf ( "Is '%s' a palindrome: %s\n " , "racecar" , isPalindrome
( "racecar" , 7 ) ? "true" : "false" ) ; printf ( "Is '%s' a palindrome: %s\n " , "" , isPalindrome
( "" , 0 ) ? "true" : "false" ) ;
printf ( "\n Is '%s' a palindrome: %s\n " , "a" , isPalindrome2
( "a" , 1 ) ? "true" : "false" ) ; printf ( "Is '%s' a palindrome: %s\n " , "motor" , isPalindrome2
( "motor" , 5 ) ? "true" : "false" ) ; printf ( "Is '%s' a palindrome: %s\n " , "rotor" , isPalindrome2
( "rotor" , 5 ) ? "true" : "false" ) ; printf ( "Is '%s' a palindrome: %s\n " , "civic" , isPalindrome2
( "civic" , 5 ) ? "true" : "false" ) ; printf ( "Is '%s' a palindrome: %s\n " , "racecar" , isPalindrome2
( "racecar" , 7 ) ? "true" : "false" ) ; printf ( "Is '%s' a palindrome: %s\n " , "" , isPalindrome2
( "" , 0 ) ? "true" : "false" ) ;
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRib29sLmg+Cgp2b2lkIHN3YXAoaW50KiBhcnIsIGludCBpbmRleE9uZSwgaW50IGluZGV4VHdvKSB7CglpZihhcnIhPU5VTEwpewoJCWludCB0bXAgPSBhcnJbaW5kZXhPbmVdOwoJCWFycltpbmRleE9uZV0gPSBhcnJbaW5kZXhUd29dOwoJCWFycltpbmRleFR3b10gPSB0bXA7Cgl9Cn0KCnZvaWQgZGlzcGxheUFycmF5KGludCogYXJyLCBpbnQgbGVuKSB7CglpZihhcnIhPU5VTEwpIHsKCQlwcmludGYoInsgIik7CgkJZm9yKGludCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CgkJCXByaW50ZigiJWQgIiwgYXJyW2ldKTsKCQl9CgkJcHJpbnRmKCJ9XG4iKTsKCX0KfQoKdm9pZCBzZWxlY3Rpb25Tb3J0KGludCogYXJyLCBpbnQgbGVuKXsKCQoJaWYoYXJyIT1OVUxMKSB7CgkJZm9yKGludCBpID0gMDsgaSA8IChsZW4tMSk7ICsraSkgewoJCQlpbnQgbWluSW5kZXggPSBpOwoJCQlpbnQgbWluVmFsdWUgPSBhcnJbaV07CgkJCQoJCQkvL0l0ZXJhdGUgdGhydSByaWdodCBzdWJhcnJheSBhbmQgZmluZCB0aGUgc21hbGxlc3QgdmFsdWUKCQkJZm9yKGludCBqID0gKGkrMSk7IGogPCBsZW47ICsraikgewoJCQkJaWYoYXJyW2pdPG1pblZhbHVlKSB7CgkJCQkJbWluSW5kZXggPSBqOwoJCQkJCW1pblZhbHVlID0gYXJyW2pdOwoJCQkJfQoJCQl9CgkJCQoJCQlpZihtaW5JbmRleCE9aSkgewoJCQkJLy9Td2FwIGN1cnJlbnQgdmFsdWUKCQkJCXN3YXAoYXJyLGksIG1pbkluZGV4KTsKCQkJfQoJCX0KCX0KCQp9Cgp2b2lkIGluc2VydGlvblNvcnQoaW50KiBhcnIsIGludCBsZW4pewoJCglmb3IoaW50IGkgPSAxOyBpIDwgbGVuOyArK2kpewoJCWludCBrZXkgPSBhcnJbaV07CgkJaW50IGogPSAoaS0xKTsKCQkKCQkvL0l0ZXJhdGUgdGhydSBsZWZ0IHN1YmFycmF5IGFuZCBmaW5kIHRoZSBjb3JyZWN0IHBvc2l0aW9uIGZvciBpbnNlcnRpb24KCQl3aGlsZSgoaj49MCkgJiYgKGFycltqXT5rZXkpKXsKCQkJYXJyW2orMV0gPSBhcnJbal07CgkJCS0tajsKCQl9CgkJCgkJYXJyW2orMV0gPSBrZXk7Cgl9Cn0KCmJvb2wgaXNQYWxpbmRyb21lKGNoYXIqIHdvcmQsIGludCBsZW4pIHsKCWJvb2wgaXNQYWxpbmRyb21lID0gdHJ1ZTsKCQoJaWYod29yZCE9TlVMTCkgewoJCWZvcihpbnQgaT0wOyBpPChsZW4vMik7ICsraSkgewoJCQlpbnQgZW5kID0gKGxlbi1pKSAtIDE7CgkJCQoJCQkvL0RldGVybWluZSBpZiB0aGUgY2hhcmFjdGVycyBhdCB0aGUgb3Bwb3NpdGUgZW5kcyBvZiB0aGUgc3RyaW5nIGFyZQoJCQkvL2VxdWFsCgkJCWlmKHdvcmRbaV0hPXdvcmRbZW5kXSkgewoJCQkJaXNQYWxpbmRyb21lID0gZmFsc2U7CgkJCQlicmVhazsKCQkJfQoJCX0KCX0KCQoJcmV0dXJuIGlzUGFsaW5kcm9tZTsKfQoKYm9vbCBpc1BhbGluZHJvbWUyKGNoYXIqIHdvcmQsIGludCBsZW4pIHsKCQoJLy9TdHJpbmcgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGEgc2luZ2xlIGNoYXJhY3RlcgoJaWYobGVuPD0xKSB7CgkJcmV0dXJuIHRydWU7Cgl9CgkKCS8vQ29tcGFyZSBmaXJzdCBhbmQgbGFzdCBjaGFyYWN0ZXJzCglpZih3b3JkWzBdIT13b3JkW2xlbi0xXSkgewoJCXJldHVybiBmYWxzZTsKCX0KCQoJcmV0dXJuIGlzUGFsaW5kcm9tZTIod29yZCArIDEsIChsZW4tMikpOwp9CgppbnQgbWFpbigpIHsKCQoJaW50IGFycltdID0geyA1NiwgMCwgLTIsIDEwLCAtMywgMSB9OwoJaW50IGxlbiA9IHNpemVvZihhcnIpL3NpemVvZihpbnQpOwoJCgkvL0V4cGVjdGVkOiAtMywgLTIsIDAsIDEsIDEwLCA1NgoJc2VsZWN0aW9uU29ydChhcnIsbGVuKTsKCWRpc3BsYXlBcnJheShhcnIsbGVuKTsKCQoJaW50IGFycjJbXSA9IHsgNzAsIDEwMCwgMywgNCwgLTksIDEsIDUgfTsKCWludCBsZW4yID0gc2l6ZW9mKGFycjIpL3NpemVvZihpbnQpOwoJCgkvL0V4cGVjdGVkOiAtOSwgMSwgMywgNCwgNSwgNiwgMTAwCglpbnNlcnRpb25Tb3J0KGFycjIsbGVuMik7CglkaXNwbGF5QXJyYXkoYXJyMixsZW4yKTsKCQoJcHJpbnRmKCJJcyAnJXMnIGEgcGFsaW5kcm9tZTogJXNcbiIsICJhIiwgaXNQYWxpbmRyb21lKCJhIiwgMSk/ICJ0cnVlIjogImZhbHNlIik7CglwcmludGYoIklzICclcycgYSBwYWxpbmRyb21lOiAlc1xuIiwgIm1vdG9yIiwgaXNQYWxpbmRyb21lKCJtb3RvciIsIDUpID8gInRydWUiIDogImZhbHNlIik7CglwcmludGYoIklzICclcycgYSBwYWxpbmRyb21lOiAlc1xuIiwgInJvdG9yIiwgaXNQYWxpbmRyb21lKCJyb3RvciIsIDUpID8gInRydWUiIDogImZhbHNlIik7CglwcmludGYoIklzICclcycgYSBwYWxpbmRyb21lOiAlc1xuIiwgImNpdmljIiwgaXNQYWxpbmRyb21lKCJjaXZpYyIsIDUpID8gInRydWUiIDogImZhbHNlIik7CglwcmludGYoIklzICclcycgYSBwYWxpbmRyb21lOiAlc1xuIiwgInJhY2VjYXIiLCBpc1BhbGluZHJvbWUoInJhY2VjYXIiLCA3KSA/ICJ0cnVlIiA6ICJmYWxzZSIpOwoJcHJpbnRmKCJJcyAnJXMnIGEgcGFsaW5kcm9tZTogJXNcbiIsICIiLCBpc1BhbGluZHJvbWUoIiIsIDApID8gInRydWUiIDogImZhbHNlIik7CgkKCXByaW50ZigiXG5JcyAnJXMnIGEgcGFsaW5kcm9tZTogJXNcbiIsICJhIiwgaXNQYWxpbmRyb21lMigiYSIsIDEpPyAidHJ1ZSI6ICJmYWxzZSIpOwoJcHJpbnRmKCJJcyAnJXMnIGEgcGFsaW5kcm9tZTogJXNcbiIsICJtb3RvciIsIGlzUGFsaW5kcm9tZTIoIm1vdG9yIiwgNSkgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKCXByaW50ZigiSXMgJyVzJyBhIHBhbGluZHJvbWU6ICVzXG4iLCAicm90b3IiLCBpc1BhbGluZHJvbWUyKCJyb3RvciIsIDUpID8gInRydWUiIDogImZhbHNlIik7CglwcmludGYoIklzICclcycgYSBwYWxpbmRyb21lOiAlc1xuIiwgImNpdmljIiwgaXNQYWxpbmRyb21lMigiY2l2aWMiLCA1KSA/ICJ0cnVlIiA6ICJmYWxzZSIpOwoJcHJpbnRmKCJJcyAnJXMnIGEgcGFsaW5kcm9tZTogJXNcbiIsICJyYWNlY2FyIiwgaXNQYWxpbmRyb21lMigicmFjZWNhciIsIDcpID8gInRydWUiIDogImZhbHNlIik7CglwcmludGYoIklzICclcycgYSBwYWxpbmRyb21lOiAlc1xuIiwgIiIsIGlzUGFsaW5kcm9tZTIoIiIsIDApID8gInRydWUiIDogImZhbHNlIik7CgkKCXJldHVybiAwOwp9