Common Basic Algorithm Notes

Source: Internet
Author: User
Some common basic algorithms (not to be continued)

Quick Sort

int partition(int left,int right,int arr[]){    int i = left;    int j = right;    int value = arr[left];    while (j > i)    {        //从右边j开始找到一个比value小的值        while (j > i && arr[j] >= value)            j--;        if (j > i)        {            arr[i] = arr[j];            i++;        }        //从左边i开始找到一个比value大的值        while (j > i && arr[i] <= value)            i++;        if (j > i)        {            arr[j] = arr[i];            j--;        }    }    //i=j时代表所有比value大的值都到了右边,比value小的到了左边    arr[i] = value;    return i;}
void quickSort(int arr[], int left, int right){    if (left < right)    {        int i = partition(left, right,arr);        quickSort(arr, left, i - 1);        quickSort(arr, i + 1, right);    }}void quickSortTest(){    int arr[10] = { 1, 34, 5, 6, 8, 12, 5, 9, 345, 0 };    int n = 10;    cout << "==================quickSort====================" << endl;    for (int i = 0; i <= n - 1; i++)    {        cout << arr[i] << "\t";    }    cout << endl;    quickSort(arr, 0, 9);    for (int i = 0; i <= n - 1; i++)    {        cout << arr[i] << "\t";    }    cout << endl;}

Heap Sort

Include
  
   
Assuming that the left and right subtree of the first node is already the largest heap, after adding the//i node, resize the heap void heapadjust (int arr[], int i, int size) {int L = 2*i;    int r = l+1;    int max = i;    if (i<= (SIZE/2)) {//non-leaf nodes need to be adjusted if (L<=size&&arr[l]>arr[max]) max = l;    if (R<=size&&arr[r]>arr[max]) max = R;        if (max!=i) {Arr[max] ^= arr[i];        Arr[i] ^= Arr[max];        Arr[max] ^= arr[i];        int temp = Arr[i];        Arr[i] = Arr[max];        Arr[max] = temp;    Heapadjust (arr, max, size);    }}}//establishes the maximum heap void buildheap (int arr[], int heapsize) {int middle = HEAPSIZE/2; for (int i=middle;i>=1;i--) heapadjust (arr,i,heapsize);}    Heap sort void heapsort (int arr[], int size) {buildheap (arr,size);    for (int i=size;i>=2;i--) {//arr[i] ^= arr[1];    ARR[1] ^= arr[i];    Arr[i] ^= arr[1];    Arr[i] + = arr[1];    ARR[1] = arr[i]-arr[1];    Arr[i] = arr[i]-arr[1];    Heapadjust (arr,1,i-1);    }}void printarr (int arr[], int n) {int i =-1; while (i++
   
    < code="">
   
  

插入排序

void insertSort(){    int arr[10] = { 1, 34, 5, 6, 8, 12, 5, 9, 345, 0 };    int n = 10;    cout << "==================insertSort====================" << endl;    for (int i = 0; i <= n - 1; i++)    {        cout << arr[i] << "\t";    }    cout << endl;    for (int i = 1; i <= n - 1; i++)    {        int j;        int temp = arr[i];        //内循环将已排序的且比arr[i]大的往前挪        for (j = i - 1; j >= 0 && arr[j] > temp; j--)        {            arr[j + 1] = arr[j];        }        //最后将最初的arr[i]值放到空出的位置        arr[j + 1] = temp;    }    for (int i = 0; i <= n - 1; i++)    {        cout << arr[i] << "\t";    }}

选择排序

void selectSort(){    int arr[10] = { 1, 34, 5, 6, 8, 12, 5, 9, 345, 0 };    int n = 10;    cout << "==================selectSort====================" << endl;    for (int i = 0; i <= n - 1; i++)    {        cout << arr[i] << "\t";    }    cout << endl;    for (int i = 0; i <= n - 2; i++)    {        int key = i;        //内循环找到第i大的值的下标        for (int j = i + 1; j <= n - 1; j++)        {            if (arr[j] < arr[key])            {                key = j;            }        }        int value = arr[i];        arr[i] = arr[key];        arr[key] = value;    }    for (int i = 0; i <= n - 1; i++)    {        cout << arr[i] << "\t";    }}

按层打印二叉树

#include 
   
    
     
    Queue q = new Queue();void printBinaryTree(Node *n){    q.put(n);    Node *next = NULL;    while(NULL!=(next=q.get()))    {        if(next->val!=NULL)        std::cout<
    
     
      
     value;        if(next->left!=NULL)            q.put(next->left);        if(next->right!=NULL)            q.put(next->right);    }}
    
     
   
    

后序遍历二叉树

void postorder(Node root){    if(root == NULL)        return;    postorder(root->left);    postorder(root->right);    visit(root);}void postOrder(Node root){    Stack stack = new Stack();    Node tmp = root;    while(tmp!=NULL || !stack.empty())    {        if(tmp!=NULL)        {            stack.push(tmp,"left");            tmp = tmp->left;        }        else        {            s = stack.pop();            tmp = s.tmp;            tag = s.tag;            if(tag=="right")            {                visit(tmp);                tmp = NULL;            }            else            {                stack.push(tmp,"right");                tmp = tmp->right;            }        }    }}

单链表相关(待完善)

//单链表反转void reverse1(node **head){    node *temp;    node *op;    temp = *head;    op = temp->next;    (*head)->next = NULL;    while(op)    {        //保存原始op的下一个        temp = op->next;        //拆开链表        op->next = *head;        //移动head        *head = op;        //移动op        op = temp;    }}void reverse2(node **head){    //使用栈先进后出}//反向打印单链表void reversePrint(node *head){    if (head->next != NULL)    {        reversePrint(head->next);        printf("%d\n",head->next->data);    }}

数组去重

function cleanArray(arr){    var hash = {};    var len = arr.length;    for (var i = 0; i < len; i++) {        if(undefined == hash[arr[i]])            hash[arr[i]] = arr[i];    };    return hash;}//testcasevar arr = [1,2,3,'1','3',45,123,2,3,45,9,9,"test","fadsa","test"];console.log(cleanArray(arr));//output Object {1: 1, 2: 2, 3: 3, 9: 9, 45: 45, 123: 123, test: "test", fadsa: "fadsa"}

求字符数组全排列

function permute(strpre, str){  if(str.length==0){    console.log(strpre);  }else{        var l = str.length;    for(var i=0;i
   
    < code="">

二分查找

int binarySearch(int arr[], int l, int r, int k){    while(l<=r){        int m = l+(r-l)/2;        if(arr[m]==k) return m;        if(arr[m]>k) r = m+1;        else l = m-1;    }    return -1;}int binarySearch1(int arr[], int l, int r, int k){    if(r>=l){        int m = l+(r-l)/2;        if(arr[m]==k) return m;        if(arr[m]>k) binarySearch1(arr, l, m-1, k);        else binarySearch1(arr, m+1, r, k);        }       return -1;}

字符串反转

#include 
    
     
      
     #include 
     
      
       
      void reverse1(char *s){    char *p1,*p2;    char c;    p1 = s;    p2 = s+strlen(s)-1;    while(p1
      
       
       
         1){ char c = *s; *s = *(s+tail-1); *(s+tail-1) = c; reverse4(s+1,tail-2); }} 
       
     
      
    
     

字符串复制

void copy(char *s, char *d){    while(*s!='\0'){        *d++ = *s++;    }    *d = '\0';}

以上就介绍了常见基础算法笔记,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

  • Contact Us

    The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

    If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.