日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

天勤2022数据结构(七)排序

發布時間:2023/12/31 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 天勤2022数据结构(七)排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔

天勤2022數據結構(七)排序

  • 前言
  • 易混知識點
  • 一、基礎算法
  • 二、綜合應用題
  • 總結


前言


穩定:guibing
不穩定: 些兒 朋友

易混知識點

  • 與序列初始狀態無關: 堆排序 ??簡單選擇排序
  • 初始為遞增 按遞增排序:
    • 高效:直接插入 ??冒泡
    • 低效:快速排序
  • 一、基礎算法

  • 插入排序

  • 直接插入排序

  • 折半插入排序

    減少 比較 次數

  • 希爾排序

    不能保證每趟排序至少能將一個關鍵字放在其最終位置上

    void shellSort(int arr[], int n){int temp;for(int gap = n/2; gap>0; gap/=2){for(int i = gap; i<n; i++){temp = arr[i];int j;for(j=i; j>=gap && arr[j-gap]>temp; j-=gap){arr[j] = arr[j - gap];}arr[j] = temp;}} }
  • 選擇排序

  • 簡單選擇排序

    比較次數 與 初始序列 無關(全比較)

  • 堆排序

    // arr[low]-arr[high] 對low上的結點進行調整 void Sift(int arr[], int low, int high){int i = low, j = 2*i+1;int temp = arr[i];while(j <= high){if(j < high && arr[j] < arr[j+1]){j++;}if(temp < arr[j]){arr[i] = arr[j];i = j;j = 2 * i + 1;}else{break;} }arr[i] = temp; }void heapSort(int arr[], int n) {int i, temp;// 建堆for(i = n/2-1; i>=0; i--){Sift(arr, i, n-1);}// 維護(逐個移出堆頂元素后的維護)for(i = n-1; i>0; i--){temp = arr[0];arr[0] = arr[i];arr[i] = temp;Sift(arr, 0, i-1); } }
  • 交換排序

  • 冒泡排序

    排序趟數 與 序列的原始狀態 有關

  • 快速排序

    有序情況下 退化為冒泡排序
    遞歸次數 與 劃分后分區的處理順序 無關 (視為二叉樹,多少個結點,遍歷多少次 )
    [真題] 最好用 順序結構存儲
    一趟之后 確定一個關鍵字 左邊的(可以沒有)小于 ?? 右邊的(可以沒有)大于

    void quick_sort(int arr[], int l, int r) {int temp;int i = l, j = r , x = arr[l + r >> 1];if(i < j){temp = arr[l];// 后往前while(i<j && arr[j]>=temp) j--;if(i<j){arr[i] = arr[j];i++; // i右移}// 前往后while(i<j && arr[i]<=temp) i++;if(i<j){arr[j] = arr[i];j--; // j左移}arr[i] = temp;quick_sort(arr, l, j), quick_sort(arr, j + 1, r);} }
  • 二路歸并排序

    void mergeSort(int A[], int low, int high){if(low < high){int mid = (low + high)/2;mergeSort(A, low, mid);mergeSort(A, mid+1, high);merge(A, low, mid, high);} }void merge(int A[], int low, int mid, int high){int i, j, k;int len1 = mid - low + 1;int len2 = high - mid;int L[len1], R[len2];for(i = 0; i<len1; i++)L[i] = A[low+i]; for(j = 0; j<len2; j++)R[j] = A[mid + 1 + j];i = 0; j = 0; k = low;while(i<len1 && j<len2){if(L[i] <= R[i]){A[k] = L[i];i++;}else{A[k] = R[j];j++;}k++;} while(i<len1) A[k++] = L[i++];while(j<len2) A[k++] = R[j++]; }

    【易錯點】
    ?L[i] = A[low+i];
    ?R[j] = A[mid + 1 + j];

  • 基數排序

    不需要關鍵字的比較

  • 二、綜合應用題

    總結

    提示:這里對文章進行總結:

    總結

    以上是生活随笔為你收集整理的天勤2022数据结构(七)排序的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。