Dada una array no ordenada arr[0..n-1] de tamaño n, encuentre la longitud mínima de subarreglo arr[s..e] tal que al ordenar este subarreglo se ordene todo el arreglo.
Ejemplos:
- Si el arreglo de entrada es [10, 12, 20, 30, 25, 40, 32, 31, 35, 50, 60], su programa debería poder encontrar que el subarreglo se encuentra entre los índices 3 y 8.
- Si el arreglo de entrada es [0, 1, 15, 25, 6, 7, 30, 40, 50], su programa debería poder encontrar que el subarreglo se encuentra entre los índices 2 y 5.
Solución:
C++
// C++ program to find the Minimum length Unsorted Subarray, // sorting which makes the complete array sorted #include<bits/stdc++.h> using namespace std; void printUnsorted(int arr[], int n) { int s = 0, e = n-1, i, max, min; // step 1(a) of above algo for (s = 0; s < n-1; s++) { if (arr[s] > arr[s+1]) break; } if (s == n-1) { cout << "The complete array is sorted"; return; } // step 1(b) of above algo for(e = n - 1; e > 0; e--) { if(arr[e] < arr[e-1]) break; } // step 2(a) of above algo max = arr[s]; min = arr[s]; for(i = s + 1; i <= e; i++) { if(arr[i] > max) max = arr[i]; if(arr[i] < min) min = arr[i]; } // step 2(b) of above algo for( i = 0; i < s; i++) { if(arr[i] > min) { s = i; break; } } // step 2(c) of above algo for( i = n -1; i >= e+1; i--) { if(arr[i] < max) { e = i; break; } } // step 3 of above algo cout << "The unsorted subarray which" << " makes the given array" << endl << "sorted lies between the indices " << s << " and " << e; return; } int main() { int arr[] = {10, 12, 20, 30, 25, 40, 32, 31, 35, 50, 60}; int arr_size = sizeof(arr)/sizeof(arr[0]); printUnsorted(arr, arr_size); getchar(); return 0; } // This code is contributed // by Akanksha Rai
C
// C program to find the Minimum length Unsorted Subarray, // sorting which makes the complete array sorted #include<stdio.h> void printUnsorted(int arr[], int n) { int s = 0, e = n-1, i, max, min; // step 1(a) of above algo for (s = 0; s < n-1; s++) { if (arr[s] > arr[s+1]) break; } if (s == n-1) { printf("The complete array is sorted"); return; } // step 1(b) of above algo for(e = n - 1; e > 0; e--) { if(arr[e] < arr[e-1]) break; } // step 2(a) of above algo max = arr[s]; min = arr[s]; for(i = s + 1; i <= e; i++) { if(arr[i] > max) max = arr[i]; if(arr[i] < min) min = arr[i]; } // step 2(b) of above algo for( i = 0; i < s; i++) { if(arr[i] > min) { s = i; break; } } // step 2(c) of above algo for( i = n -1; i >= e+1; i--) { if(arr[i] < max) { e = i; break; } } // step 3 of above algo printf(" The unsorted subarray which makes the given array " " sorted lies between the indees %d and %d", s, e); return; } int main() { int arr[] = {10, 12, 20, 30, 25, 40, 32, 31, 35, 50, 60}; int arr_size = sizeof(arr)/sizeof(arr[0]); printUnsorted(arr, arr_size); getchar(); return 0; }
Java
// Java program to find the Minimum length Unsorted Subarray, // sorting which makes the complete array sorted class Main { static void printUnsorted(int arr[], int n) { int s = 0, e = n-1, i, max, min; // step 1(a) of above algo for (s = 0; s < n-1; s++) { if (arr[s] > arr[s+1]) break; } if (s == n-1) { System.out.println("The complete array is sorted"); return; } // step 1(b) of above algo for(e = n - 1; e > 0; e--) { if(arr[e] < arr[e-1]) break; } // step 2(a) of above algo max = arr[s]; min = arr[s]; for(i = s + 1; i <= e; i++) { if(arr[i] > max) max = arr[i]; if(arr[i] < min) min = arr[i]; } // step 2(b) of above algo for( i = 0; i < s; i++) { if(arr[i] > min) { s = i; break; } } // step 2(c) of above algo for( i = n -1; i >= e+1; i--) { if(arr[i] < max) { e = i; break; } } // step 3 of above algo System.out.println(" The unsorted subarray which"+ " makes the given array sorted lies"+ " between the indices "+s+" and "+e); return; } public static void main(String args[]) { int arr[] = {10, 12, 20, 30, 25, 40, 32, 31, 35, 50, 60}; int arr_size = arr.length; printUnsorted(arr, arr_size); } }
Python3
# Python3 program to find the Minimum length Unsorted Subarray, # sorting which makes the complete array sorted def printUnsorted(arr, n): e = n-1 # step 1(a) of above algo for s in range(0,n-1): if arr[s] > arr[s+1]: break if s == n-1: print ("The complete array is sorted") exit() # step 1(b) of above algo e= n-1 while e > 0: if arr[e] < arr[e-1]: break e -= 1 # step 2(a) of above algo max = arr[s] min = arr[s] for i in range(s+1,e+1): if arr[i] > max: max = arr[i] if arr[i] < min: min = arr[i] # step 2(b) of above algo for i in range(s): if arr[i] > min: s = i break # step 2(c) of above algo i = n-1 while i >= e+1: if arr[i] < max: e = i break i -= 1 # step 3 of above algo print ("The unsorted subarray which makes the given array") print ("sorted lies between the indexes %d and %d"%( s, e)) arr = [10, 12, 20, 30, 25, 40, 32, 31, 35, 50, 60] arr_size = len(arr) printUnsorted(arr, arr_size) # This code is contributed by Shreyanshi Arun
C#
// C# program to find the Minimum length Unsorted Subarray, // sorting which makes the complete array sorted using System; class GFG { static void printUnsorted(int []arr, int n) { int s = 0, e = n-1, i, max, min; // step 1(a) of above algo for (s = 0; s < n-1; s++) { if (arr[s] > arr[s+1]) break; } if (s == n-1) { Console.Write("The complete " + "array is sorted"); return; } // step 1(b) of above algo for(e = n - 1; e > 0; e--) { if(arr[e] < arr[e-1]) break; } // step 2(a) of above algo max = arr[s]; min = arr[s]; for(i = s + 1; i <= e; i++) { if(arr[i] > max) max = arr[i]; if(arr[i] < min) min = arr[i]; } // step 2(b) of above algo for( i = 0; i < s; i++) { if(arr[i] > min) { s = i; break; } } // step 2(c) of above algo for( i = n -1; i >= e+1; i--) { if(arr[i] < max) { e = i; break; } } // step 3 of above algo Console.Write(" The unsorted subarray which"+ " makes the given array sorted lies \n"+ " between the indices "+s+" and "+e); return; } public static void Main() { int []arr = {10, 12, 20, 30, 25, 40, 32, 31, 35, 50, 60}; int arr_size = arr.Length; printUnsorted(arr, arr_size); } } // This code contributed by Sam007
PHP
<?php // PHP program to find the Minimum length Unsorted Subarray, // sorting which makes the complete array sorted function printUnsorted(&$arr, $n) { $s = 0; $e = $n - 1; // step 1(a) of above algo for ($s = 0; $s < $n - 1; $s++) { if ($arr[$s] > $arr[$s + 1]) break; } if ($s == $n - 1) { echo "The complete array is sorted"; return; } // step 1(b) of above algo for($e = $n - 1; $e > 0; $e--) { if($arr[$e] < $arr[$e - 1]) break; } // step 2(a) of above algo $max = $arr[$s]; $min = $arr[$s]; for($i = $s + 1; $i <= $e; $i++) { if($arr[$i] > $max) $max = $arr[$i]; if($arr[$i] < $min) $min = $arr[$i]; } // step 2(b) of above algo for( $i = 0; $i < $s; $i++) { if($arr[$i] > $min) { $s = $i; break; } } // step 2(c) of above algo for( $i = $n - 1; $i >= $e + 1; $i--) { if($arr[$i] < $max) { $e = $i; break; } } // step 3 of above algo echo " The unsorted subarray which makes " . "the given array " . "\n" . " sorted lies between the indees " . $s . " and " . $e; return; } // Driver code $arr = array(10, 12, 20, 30, 25, 40, 32, 31, 35, 50, 60); $arr_size = sizeof($arr); printUnsorted($arr, $arr_size); // This code is contributed // by ChitraNayal ?>
Javascript
<script> // Javascript program to find the Minimum length Unsorted Subarray, // sorting which makes the complete array sorted function printUnsorted(arr,n) { let s = 0, e = n-1, i, max, min; // step 1(a) of above algo for (s = 0; s < n-1; s++) { if (arr[s] > arr[s+1]) break; } if (s == n-1) { document.write("The complete array is sorted"); return; } // step 1(b) of above algo for(e = n - 1; e > 0; e--) { if(arr[e] < arr[e-1]) break; } // step 2(a) of above algo max = arr[s]; min = arr[s]; for(i = s + 1; i <= e; i++) { if(arr[i] > max) max = arr[i]; if(arr[i] < min) min = arr[i]; } // step 2(b) of above algo for( i = 0; i < s; i++) { if(arr[i] > min) { s = i; break; } } // step 2(c) of above algo for( i = n -1; i >= e+1; i--) { if(arr[i] < max) { e = i; break; } } // step 3 of above algo document.write(" The unsorted subarray which"+ " makes the given array sorted lies"+ " between the indees "+s+" and "+e); return; } let arr=[10, 12, 20, 30, 25, 40, 32, 31, 35, 50, 60]; let arr_size = arr.length; printUnsorted(arr, arr_size); // This code is contributed by avanitrachhadiya2155 </script>
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA