Træ sortering
Træ sortering er en sorteringsalgoritme, der er baseret på Binært søgetræ datastruktur. Den opretter først et binært søgetræ fra elementerne i inputlisten eller arrayet og udfører derefter en gennemgang i rækkefølge på det oprettede binære søgetræ for at få elementerne i sorteret rækkefølge.
Algoritme:
Trin 1: Tag elementernes input i et array.Trin 2: Opret et binært søgetræ ved at indsætte dataelementer fra arrayet i binært søgetræ .Trin 3: Udfør gennemgang i rækkefølge på træet for at få elementerne i sorteret rækkefølge.Anvendelser af træsort:
- Dens mest almindelige brug er at redigere elementerne online: efter hver installation er et sæt objekter, der er set indtil videre, tilgængeligt i et struktureret program.
- Hvis du bruger et splay-træ som et binært søgetræ, har den resulterende algoritme (kaldet splaysort) en yderligere egenskab, at det er en adaptiv sortering, hvilket betyder, at dens arbejdstid er hurtigere end O (n log n) for virtuelle input.
Nedenfor er implementeringen af ovenstående tilgang:
C++Java// C++ program to implement Tree Sort #includeusing namespace std ; struct Node { int key ; struct Node * left * right ; }; // A utility function to create a new BST Node struct Node * newNode ( int item ) { struct Node * temp = new Node ; temp -> key = item ; temp -> left = temp -> right = NULL ; return temp ; } // Stores inorder traversal of the BST // in arr[] void storeSorted ( Node * root int arr [] int & i ) { if ( root != NULL ) { storeSorted ( root -> left arr i ); arr [ i ++ ] = root -> key ; storeSorted ( root -> right arr i ); } } /* A utility function to insert a new Node with given key in BST */ Node * insert ( Node * node int key ) { /* If the tree is empty return a new Node */ if ( node == NULL ) return newNode ( key ); /* Otherwise recur down the tree */ if ( key < node -> key ) node -> left = insert ( node -> left key ); else if ( key > node -> key ) node -> right = insert ( node -> right key ); /* return the (unchanged) Node pointer */ return node ; } // This function sorts arr[0..n-1] using Tree Sort void treeSort ( int arr [] int n ) { struct Node * root = NULL ; // Construct the BST root = insert ( root arr [ 0 ]); for ( int i = 1 ; i < n ; i ++ ) root = insert ( root arr [ i ]); // Store inorder traversal of the BST // in arr[] int i = 0 ; storeSorted ( root arr i ); } // Driver Program to test above functions int main () { //create input array int arr [] = { 5 4 7 2 11 }; int n = sizeof ( arr ) / sizeof ( arr [ 0 ]); treeSort ( arr n ); for ( int i = 0 ; i < n ; i ++ ) cout < < arr [ i ] < < ' ' ; return 0 ; } Python3// Java program to // implement Tree Sort class GFG { // Class containing left and // right child of current // node and key value class Node { int key ; Node left right ; public Node ( int item ) { key = item ; left = right = null ; } } // Root of BST Node root ; // Constructor GFG () { root = null ; } // This method mainly // calls insertRec() void insert ( int key ) { root = insertRec ( root key ); } /* A recursive function to insert a new key in BST */ Node insertRec ( Node root int key ) { /* If the tree is empty return a new node */ if ( root == null ) { root = new Node ( key ); return root ; } /* Otherwise recur down the tree */ if ( key < root . key ) root . left = insertRec ( root . left key ); else if ( key > root . key ) root . right = insertRec ( root . right key ); /* return the root */ return root ; } // A function to do // inorder traversal of BST void inorderRec ( Node root ) { if ( root != null ) { inorderRec ( root . left ); System . out . print ( root . key + ' ' ); inorderRec ( root . right ); } } void treeins ( int arr [] ) { for ( int i = 0 ; i < arr . length ; i ++ ) { insert ( arr [ i ] ); } } // Driver Code public static void main ( String [] args ) { GFG tree = new GFG (); int arr [] = { 5 4 7 2 11 }; tree . treeins ( arr ); tree . inorderRec ( tree . root ); } } // This code is contributed // by Vibin MC## Python3 program to # implement Tree Sort # Class containing left and # right child of current # node and key value class Node : def __init__ ( self item = 0 ): self . key = item self . left self . right = None None # Root of BST root = Node () root = None # This method mainly # calls insertRec() def insert ( key ): global root root = insertRec ( root key ) # A recursive function to # insert a new key in BST def insertRec ( root key ): # If the tree is empty # return a new node if ( root == None ): root = Node ( key ) return root # Otherwise recur # down the tree if ( key < root . key ): root . left = insertRec ( root . left key ) elif ( key > root . key ): root . right = insertRec ( root . right key ) # return the root return root # A function to do # inorder traversal of BST def inorderRec ( root ): if ( root != None ): inorderRec ( root . left ) print ( root . key end = ' ' ) inorderRec ( root . right ) def treeins ( arr ): for i in range ( len ( arr )): insert ( arr [ i ]) # Driver Code arr = [ 5 4 7 2 11 ] treeins ( arr ) inorderRec ( root ) # This code is contributed by shinjanpatraJavaScript// C# program to // implement Tree Sort using System ; public class GFG { // Class containing left and // right child of current // node and key value public class Node { public int key ; public Node left right ; public Node ( int item ) { key = item ; left = right = null ; } } // Root of BST Node root ; // Constructor GFG () { root = null ; } // This method mainly // calls insertRec() void insert ( int key ) { root = insertRec ( root key ); } /* A recursive function to insert a new key in BST */ Node insertRec ( Node root int key ) { /* If the tree is empty return a new node */ if ( root == null ) { root = new Node ( key ); return root ; } /* Otherwise recur down the tree */ if ( key < root . key ) root . left = insertRec ( root . left key ); else if ( key > root . key ) root . right = insertRec ( root . right key ); /* return the root */ return root ; } // A function to do // inorder traversal of BST void inorderRec ( Node root ) { if ( root != null ) { inorderRec ( root . left ); Console . Write ( root . key + ' ' ); inorderRec ( root . right ); } } void treeins ( int [] arr ) { for ( int i = 0 ; i < arr . Length ; i ++ ) { insert ( arr [ i ]); } } // Driver Code public static void Main ( String [] args ) { GFG tree = new GFG (); int [] arr = { 5 4 7 2 11 }; tree . treeins ( arr ); tree . inorderRec ( tree . root ); } } // This code is contributed by Rajput-Ji< script > // Javascript program to // implement Tree Sort // Class containing left and // right child of current // node and key value class Node { constructor ( item ) { this . key = item ; this . left = this . right = null ; } } // Root of BST let root = new Node (); root = null ; // This method mainly // calls insertRec() function insert ( key ) { root = insertRec ( root key ); } /* A recursive function to insert a new key in BST */ function insertRec ( root key ) { /* If the tree is empty return a new node */ if ( root == null ) { root = new Node ( key ); return root ; } /* Otherwise recur down the tree */ if ( key < root . key ) root . left = insertRec ( root . left key ); else if ( key > root . key ) root . right = insertRec ( root . right key ); /* return the root */ return root ; } // A function to do // inorder traversal of BST function inorderRec ( root ) { if ( root != null ) { inorderRec ( root . left ); document . write ( root . key + ' ' ); inorderRec ( root . right ); } } function treeins ( arr ) { for ( let i = 0 ; i < arr . length ; i ++ ) { insert ( arr [ i ]); } } // Driver Code let arr = [ 5 4 7 2 11 ]; treeins ( arr ); inorderRec ( root ); // This code is contributed // by Saurabh Jaiswal < /script>
Produktion2 4 5 7 11Kompleksitetsanalyse:
Gennemsnitlig sagstidskompleksitet: O(n log n) Det tager i gennemsnit O(log n) tid at tilføje et element til et binært søgetræ. Derfor vil tilføjelse af n elementer tage O(n log n) tid
Worst Case Tidskompleksitet: På 2 ). Den værste tidskompleksitet af træsortering kan forbedres ved at bruge et selvbalancerende binært søgetræ som Red Black Tree AVL Tree. Brug af selvbalancerende binært træ Træsortering vil tage O(n log n) tid at sortere arrayet i værste fald.
Hjælpeplads: På)
Opret quiz
Du Kan Måske Lide
Top Artikler
Kategori