亚洲国产第一站精品蜜芽_亚洲AV无码精品色午夜果冻不卡_国产香蕉九九久久精品免费_国产精品亚洲专区无码不卡

更多精彩內容,歡迎關注:

視頻號
視頻號

抖音
抖音

快手
快手

微博
微博

數據結構堆排序例題

文檔

數據結構堆排序例題

堆排序(Heapsort)是指利用堆這種數據結構所設計的一種排序算法。堆積是一個近似完全二叉樹的結構,并同時滿足堆積的性質:即子結點的鍵值或索引總是小于(或者大于)它的父節點。堆排序可以說是一種利用堆的概念來排序的選擇排序。
推薦度:
導讀堆排序(Heapsort)是指利用堆這種數據結構所設計的一種排序算法。堆積是一個近似完全二叉樹的結構,并同時滿足堆積的性質:即子結點的鍵值或索引總是小于(或者大于)它的父節點。堆排序可以說是一種利用堆的概念來排序的選擇排序。
.example-btn{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.example-btn:hover{color:#fff;background-color:#47a447;border-color:#398439}.example-btn:active{background-image:none}div.example{width:98%;color:#000;background-color:#f6f4f0;background-color:#d0e69c;background-color:#dcecb5;background-color:#e5eecc;margin:0 0 5px 0;padding:5px;border:1px solid #d4d4d4;background-image:-webkit-linear-gradient(#fff,#e5eecc 100px);background-image:linear-gradient(#fff,#e5eecc 100px)}div.example_code{line-height:1.4em;width:98%;background-color:#fff;padding:5px;border:1px solid #d4d4d4;font-size:110%;font-family:Menlo,Monaco,Consolas,"Andale Mono","lucida console","Courier New",monospace;word-break:break-all;word-wrap:break-word}div.example_result{background-color:#fff;padding:4px;border:1px solid #d4d4d4;width:98%}div.code{width:98%;border:1px solid #d4d4d4;background-color:#f6f4f0;color:#444;padding:5px;margin:0}div.code div{font-size:110%}div.code div,div.code p,div.example_code p{font-family:"courier new"}pre{margin:15px auto;font:12px/20px Menlo,Monaco,Consolas,"Andale Mono","lucida console","Courier New",monospace;white-space:pre-wrap;word-break:break-all;word-wrap:break-word;border:1px solid #ddd;border-left-width:4px;padding:10px 15px}

排序算法是《數據結構與算法》中最基本的算法之一。排序算法可以分為內部排序和外部排序,內部排序是數據記錄在內存中進行排序,而外部排序是因排序的數據很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。常見的內部排序算法有:插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序、基數排序等。以下是堆排序算法:

堆排序(Heapsort)是指利用堆這種數據結構所設計的一種排序算法。堆積是一個近似完全二叉樹的結構,并同時滿足堆積的性質:即子結點的鍵值或索引總是小于(或者大于)它的父節點。堆排序可以說是一種利用堆的概念來排序的選擇排序。分為兩種方法:

大頂堆:每個節點的值都大于或等于其子節點的值,在堆排序算法中用于升序排列;小頂堆:每個節點的值都小于或等于其子節點的值,在堆排序算法中用于降序排列;

堆排序的平均時間復雜度為 Ο(nlogn)。

1. 算法步驟

創建一個堆 H[0……n-1];

把堆首(最大值)和堆尾互換;

把堆的尺寸縮小 1,并調用 shift_down(0),目的是把新的數組頂端數據調整到相應位置;

重復步驟 2,直到堆的尺寸為 1。

2. 動圖演示

代碼實現JavaScript 實例 var len; ? ?// 因為聲明的多個函數都需要數據長度,所以把len設置成為全局變量function buildMaxHeap(arr) { ? // 建立大頂堆? ? len = arr.length;? ? for (var i = Math.floor(len/2); i >= 0; i--) {? ? ? ? heapify(arr, i);? ? }}function heapify(arr, i) { ? ? // 堆調整? ? var left = 2 * i + 1,? ? ? ? right = 2 * i + 2,? ? ? ? largest = i;? ? if (left < len && arr[left] > arr[largest]) {? ? ? ? largest = left;? ? }? ? if (right < len && arr[right] > arr[largest]) {? ? ? ? largest = right;? ? }? ? if (largest != i) {? ? ? ? swap(arr, i, largest);? ? ? ? heapify(arr, largest);? ? }}function swap(arr, i, j) {? ? var temp = arr[i];? ? arr[i] = arr[j];? ? arr[j] = temp;}function heapSort(arr) {? ? buildMaxHeap(arr);? ? for (var i = arr.length-1; i > 0; i--) {? ? ? ? swap(arr, 0, i);? ? ? ? len--;? ? ? ? heapify(arr, 0);? ? }? ? return arr;}Python實例 def buildMaxHeap(arr):? ? import math? ? for i in range(math.floor(len(arr)/2),-1,-1):? ? ? ? heapify(arr,i)def heapify(arr, i):? ? left = 2*i+1? ? right = 2*i+2? ? largest = i? ? if left < arrLen and arr[left] > arr[largest]:? ? ? ? largest = left? ? if right < arrLen and arr[right] > arr[largest]:? ? ? ? largest = right? ? if largest != i:? ? ? ? swap(arr, i, largest)? ? ? ? heapify(arr, largest)def swap(arr, i, j):? ? arr[i], arr[j] = arr[j], arr[i]def heapSort(arr):? ? global arrLen? ? arrLen = len(arr)? ? buildMaxHeap(arr)? ? for i in range(len(arr)-1,0,-1):? ? ? ? swap(arr,0,i)? ? ? ? arrLen -=1? ? ? ? heapify(arr, 0)? ? return arrGo實例 func heapSort(arr []int) []int {? ? ? ? arrLen := len(arr)? ? ? ? buildMaxHeap(arr, arrLen)? ? ? ? for i := arrLen - 1; i >= 0; i-- {? ? ? ? ? ? ? ? swap(arr, 0, i)? ? ? ? ? ? ? ? arrLen -= 1? ? ? ? ? ? ? ? heapify(arr, 0, arrLen)? ? ? ? }? ? ? ? return arr}func buildMaxHeap(arr []int, arrLen int) {? ? ? ? for i := arrLen / 2; i >= 0; i-- {? ? ? ? ? ? ? ? heapify(arr, i, arrLen)? ? ? ? }}func heapify(arr []int, i, arrLen int) {? ? ? ? left := 2*i + 1? ? ? ? right := 2*i + 2? ? ? ? largest := i? ? ? ? if left < arrLen && arr[left] > arr[largest] {? ? ? ? ? ? ? ? largest = left? ? ? ? }? ? ? ? if right < arrLen && arr[right] > arr[largest] {? ? ? ? ? ? ? ? largest = right? ? ? ? }? ? ? ? if largest != i {? ? ? ? ? ? ? ? swap(arr, i, largest)? ? ? ? ? ? ? ? heapify(arr, largest, arrLen)? ? ? ? }}func swap(arr []int, i, j int) {? ? ? ? arr[i], arr[j] = arr[j], arr[i]}Java實例 public class HeapSort implements IArraySort {? ? @Override? ? public int[] sort(int[] sourceArray) throws Exception {? ? ? ? // 對 arr 進行拷貝,不改變參數內容? ? ? ? int[] arr = Arrays.copyOf(sourceArray, sourceArray.length);? ? ? ? int len = arr.length;? ? ? ? buildMaxHeap(arr, len);? ? ? ? for (int i = len - 1; i > 0; i--) {? ? ? ? ? ? swap(arr, 0, i);? ? ? ? ? ? len--;? ? ? ? ? ? heapify(arr, 0, len);? ? ? ? }? ? ? ? return arr;? ? }? ? private void buildMaxHeap(int[] arr, int len) {? ? ? ? for (int i = (int) Math.floor(len / 2); i >= 0; i--) {? ? ? ? ? ? heapify(arr, i, len);? ? ? ? }? ? }? ? private void heapify(int[] arr, int i, int len) {? ? ? ? int left = 2 * i + 1;? ? ? ? int right = 2 * i + 2;? ? ? ? int largest = i;? ? ? ? if (left < len && arr[left] > arr[largest]) {? ? ? ? ? ? largest = left;? ? ? ? }? ? ? ? if (right < len && arr[right] > arr[largest]) {? ? ? ? ? ? largest = right;? ? ? ? }? ? ? ? if (largest != i) {? ? ? ? ? ? swap(arr, i, largest);? ? ? ? ? ? heapify(arr, largest, len);? ? ? ? }? ? }? ? private void swap(int[] arr, int i, int j) {? ? ? ? int temp = arr[i];? ? ? ? arr[i] = arr[j];? ? ? ? arr[j] = temp;? ? }}PHP 實例 function buildMaxHeap(&$arr){? ? global $len;? ? for ($i = floor($len/2); $i >= 0; $i--) {? ? ? ? heapify($arr, $i);? ? }}function heapify(&$arr, $i){? ? global $len;? ? $left = 2 * $i + 1;? ? $right = 2 * $i + 2;? ? $largest = $i;? ? if ($left < $len && $arr[$left] > $arr[$largest]) {? ? ? ? $largest = $left;? ? }? ? if ($right < $len && $arr[$right] > $arr[$largest]) {? ? ? ? $largest = $right;? ? }? ? if ($largest != $i) {? ? ? ? swap($arr, $i, $largest);? ? ? ? heapify($arr, $largest);? ? }}function swap(&$arr, $i, $j){? ? $temp = $arr[$i];? ? $arr[$i] = $arr[$j];? ? $arr[$j] = $temp;}function heapSort($arr) {? ? global $len;? ? $len = count($arr);? ? buildMaxHeap($arr);? ? for ($i = count($arr) - 1; $i > 0; $i--) {? ? ? ? swap($arr, 0, $i);? ? ? ? $len--;? ? ? ? heapify($arr, 0);? ? }? ? return $arr;}C實例 #include #include void swap(int *a, int *b) {? ? int temp = *b;? ? *b = *a;? ? *a = temp;}void max_heapify(int arr[], int start, int end) {? ? // 建立父節點指標和子節點指標? ? int dad = start;? ? int son = dad * 2 + 1;? ? while (son <= end) { // 若子節點指標在範圍內才做比較? ? ? ? if (son + 1 <= end && arr[son] < arr[son + 1]) // 先比較兩個子節點大小,選擇最大的? ? ? ? ? ? son++;? ? ? ? if (arr[dad] > arr[son]) //如果父節點大於子節點代表調整完畢,直接跳出函數? ? ? ? ? ? return;? ? ? ? else { // 否則交換父子內容再繼續子節點和孫節點比較? ? ? ? ? ? swap(&arr[dad], &arr[son]);? ? ? ? ? ? dad = son;? ? ? ? ? ? son = dad * 2 + 1;? ? ? ? }? ? }}void heap_sort(int arr[], int len) {? ? int i;? ? // 初始化,i從最後一個父節點開始調整? ? for (i = len / 2 - 1; i >= 0; i--)? ? ? ? max_heapify(arr, i, len - 1);? ? // 先將第一個元素和已排好元素前一位做交換,再重新調整,直到排序完畢? ? for (i = len - 1; i > 0; i--) {? ? ? ? swap(&arr[0], &arr[i]);? ? ? ? max_heapify(arr, 0, i - 1);? ? }}int main() {? ? int arr[] = { 3, 5, 3, 0, 8, 6, 1, 5, 8, 6, 2, 4, 9, 4, 7, 0, 1, 8, 9, 7, 3, 1, 2, 5, 9, 7, 4, 0, 2, 6 };? ? int len = (int) sizeof(arr) / sizeof(*arr);? ? heap_sort(arr, len);? ? int i;? ? for (i = 0; i < len; i++)? ? ? ? printf("%d ", arr[i]);? ? printf(" ");? ? return 0;}C++實例 #include #include using namespace std;void max_heapify(int arr[], int start, int end) {? ? // 建立父節點指標和子節點指標? ? int dad = start;? ? int son = dad * 2 + 1;? ? while (son <= end) { // 若子節點指標在範圍內才做比較? ? ? ? if (son + 1 <= end && arr[son] < arr[son + 1]) // 先比較兩個子節點大小,選擇最大的? ? ? ? ? ? son++;? ? ? ? if (arr[dad] > arr[son]) // 如果父節點大於子節點代表調整完畢,直接跳出函數? ? ? ? ? ? return;? ? ? ? else { // 否則交換父子內容再繼續子節點和孫節點比較? ? ? ? ? ? swap(arr[dad], arr[son]);? ? ? ? ? ? dad = son;? ? ? ? ? ? son = dad * 2 + 1;? ? ? ? }? ? }}void heap_sort(int arr[], int len) {? ? // 初始化,i從最後一個父節點開始調整? ? for (int i = len / 2 - 1; i >= 0; i--)? ? ? ? max_heapify(arr, i, len - 1);? ? // 先將第一個元素和已經排好的元素前一位做交換,再從新調整(剛調整的元素之前的元素),直到排序完畢? ? for (int i = len - 1; i > 0; i--) {? ? ? ? swap(arr[0], arr[i]);? ? ? ? max_heapify(arr, 0, i - 1);? ? }}int main() {? ? int arr[] = { 3, 5, 3, 0, 8, 6, 1, 5, 8, 6, 2, 4, 9, 4, 7, 0, 1, 8, 9, 7, 3, 1, 2, 5, 9, 7, 4, 0, 2, 6 };? ? int len = (int) sizeof(arr) / sizeof(*arr);? ? heap_sort(arr, len);? ? for (int i = 0; i < len; i++)? ? ? ? cout << arr[i] << ' ';? ? cout << endl;? ? return 0;}

參考文章:

https://github.com/hustcc/JS-Sorting-Algorithm/blob/master/7.heapSort.md

https://zh.wikipedia.org/wiki/%E5%A0%86%E6%8E%92%E5%BA%8F

以下是熱心網友對堆排序算法的補充,僅供參考:

熱心網友提供的補充1:

上方又沒些 C# 的堆排序,艾孜爾江補充如下:

/// 
/// 堆排序
/// 
/// 待排序數組
static void HeapSort(int[] arr)
{
    int vCount = arr.Length;
    int[] tempKey = new int[vCount + 1];
    // 元素索引從1開始
    for (int i = 0; i < vCount; i++)
    {
        tempKey[i + 1] = arr[i];
    }
    // 初始數據建堆(從含最后一個結點的子樹開始構建,依次向前,形成整個二叉堆)
    for (int i = vCount / 2; i >= 1; i--)
    {
        Restore(tempKey, i, vCount);
    }
    // 不斷輸出堆頂元素、重構堆,進行排序
    for (int i = vCount; i > 1; i--)
    {
        int temp = tempKey[i];
        tempKey[i] = tempKey[1];
        tempKey[1] = temp;
        Restore(tempKey, 1, i - 1);
    }
    //排序結果
    for (int i = 0; i < vCount; i++)
    {
        arr[i] = tempKey[i + 1];
    }
}
/// 
/// 二叉堆的重構(針對于已構建好的二叉堆首尾互換之后的重構)
/// 
/// 
/// 根結點j
/// 結點數
static void Restore(int[] arr, int rootNode, int nodeCount)
{
    while (rootNode <= nodeCount / 2) // 保證根結點有子樹
    {
        //找出左右兒子的最大值
        int m = (2 * rootNode + 1 <= nodeCount && arr[2 * rootNode + 1] > arr[2 * rootNode]) ? 2 * rootNode + 1 : 2 * rootNode;
        if (arr[m] > arr[rootNode])
        {
            int temp = arr[m];
            arr[m] = arr[rootNode];
            arr[rootNode] = temp;
            rootNode = m;
        }
        else
        {
            break;
        }
    }
}

熱心網友提供的補充2:

堆排序是不穩定的排序!

既然如此,每次構建大頂堆時,在 父節點、左子節點、右子節點取三者中最大者作為父節點就行。我們追尋的只是最終排序后的結果,所以可以簡化其中的步驟。

我將個人寫的 Java 代碼核心放在下方,有興趣的同學可以一起討論下:

public int[] sort(int a[]) {
    int len = a.length - 1;    
    for (int i = len; i > 0; i--) {
        maxHeap(a, i);        
        //交換 跟節點root 與 最后一個子節點i 的位置        
        swap(a, 0, i);        
        //i--無序數組尺寸減少了 
    }  
    return a;
}

/**構建一個大頂堆(完全二叉樹 ) 
* 從  最后一個非葉子節點  開始,若父節點小于子節點,則互換他們兩的位置。然后依次從右至左,從下到上進行! 
* 最后一個非葉子節點,它的葉子節點 必定包括了最后一個(葉子)節點,所以 最后一個非葉子節點是 a[(n+1)/2-1] 
 
* @param a 
* @param lastIndex 這個數組的最后一個元素 
*/
static void maxHeap(int a[], int lastIndex) {
    for (int i = (lastIndex + 1) / 2 - 1; i >= 0; i--) {
       //反正 堆排序不穩定,先比較父與左子,大則交換;與右子同理。(不care 左子與右子位置是否變了!) 
        if (i * 2 + 1 <= lastIndex && a[i] < a[i * 2 + 1]) {
            swap(a, i, i * 2 + 1);        
        }    
        if (i * 2 + 2 <= lastIndex && a[i] < a[i * 2 + 2]) {
            swap(a, i, i * 2 + 2);        
        }
    }
}

private void swap(int[] arr, int i, int j) {
    int temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}
以上為堆排序算法詳細介紹,插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序、基數排序等排序算法各有優缺點,用一張圖概括:

關于時間復雜度

平方階 (O(n2)) 排序 各類簡單排序:直接插入、直接選擇和冒泡排序。

線性對數階 (O(nlog2n)) 排序 快速排序、堆排序和歸并排序;

O(n1+§)) 排序,§ 是介于 0 和 1 之間的常數。 希爾排序

線性階 (O(n)) 排序 基數排序,此外還有桶、箱排序。

關于穩定性

穩定的排序算法:冒泡排序、插入排序、歸并排序和基數排序。

不是穩定的排序算法:選擇排序、快速排序、希爾排序、堆排序。

名詞解釋:

n:數據規模

k:"桶"的個數

In-place:占用常數內存,不占用額外內存

Out-place:占用額外內存

穩定性:排序后 2 個相等鍵值的順序和排序之前它們的順序相同

文檔

數據結構堆排序例題

堆排序(Heapsort)是指利用堆這種數據結構所設計的一種排序算法。堆積是一個近似完全二叉樹的結構,并同時滿足堆積的性質:即子結點的鍵值或索引總是小于(或者大于)它的父節點。堆排序可以說是一種利用堆的概念來排序的選擇排序。
推薦度:
為你推薦
資訊專欄
熱門視頻
相關推薦
java快速排序簡單代碼 含有動物的古詩 踏青詩詞佳句 描寫燕子的經典詩句 歸并排序算法流程圖 希爾排序算法vb 選擇排序代碼 基數排序算法數據結構 c語言冒泡排序法流程圖 桶排序基本算法 c語言計數排序算法 堆排序第一趟怎么求 快速排序c++代碼 有關動物的古詩 歸并排序奇數個怎么排 希爾排序法實例 簡單選擇排序算法 基數排序是一種基于 冒泡排序算法是幾層循環 桶排序思想 計數排序c 桶排序算法java java冒泡排序代碼 基數排序算法代碼 直接選擇排序穩定嗎 希爾排序實現 歸并排序算法python思想 關于描寫燕子的詩句 關于踏青的唯美詩句 帶有動物的古詩 快速排序算法java 描寫蘭花的詩句古詩 堆排序算法規則 計數排序菜鳥教程 桶排序c語言 python冒泡排序算法 基數排序流程圖 直接選擇排序 希爾排序怎么排 簡述歸并排序算法的基本思路
Top 亚洲国产第一站精品蜜芽_亚洲AV无码精品色午夜果冻不卡_国产香蕉九九久久精品免费_国产精品亚洲专区无码不卡
<sup id="m40ya"></sup>
  • 
    
  • <kbd id="m40ya"></kbd>
    <samp id="m40ya"></samp>
    <ul id="m40ya"></ul>
  • 国产精品白丝jk黑袜喷水| 久久欧美中文字幕| 欧美午夜在线一二页| 亚洲乱码日产精品bd| 欧美波霸影院| 宅男噜噜噜66一区二区66| 国产精品老牛| 久久久99免费视频| 影音先锋在线一区| 欧美精品久久久久久久免费观看 | 久久久精品午夜少妇| 伊人男人综合视频网| 欧美女主播在线| 亚洲一区二区在线看| 国产午夜精品理论片a级大结局| 亚洲一区二区三区777| 亚洲高清久久网| 欧美激情综合亚洲一二区| 亚洲一区日韩在线| 亚洲大胆人体在线| 国产乱码精品一区二区三区忘忧草 | 欧美一区午夜视频在线观看| 久久偷窥视频| 欧美国产高清| 亚洲欧美在线网| 国产精品三级视频| 久久欧美肥婆一二区| 亚洲一品av免费观看| 伊人久久亚洲热| 国产欧美日韩视频在线观看| 欧美激情精品久久久久久黑人| 国产精品青草久久久久福利99| 久久久久综合网| 欧美一级理论片| 亚洲一级在线观看| 亚洲深夜福利视频| 亚洲精品一二三区| 在线成人激情视频| 亚洲影院免费观看| 日韩系列在线| 一二三区精品| 亚洲视频免费在线| 国产精品一区亚洲| 国产精品一区二区久久国产| 国产精品网站在线播放| 国产精品女主播一区二区三区| 老牛嫩草一区二区三区日本| 狂野欧美激情性xxxx| 欧美成人综合一区| 国内伊人久久久久久网站视频 | 久久久久久电影| 亚洲欧美另类在线| 欧美在线观看视频一区二区三区| 欧美在线视频在线播放完整版免费观看| 亚洲欧洲日产国产网站| 夜夜狂射影院欧美极品| 亚洲欧美激情视频| 久久久人人人| 欧美精品久久一区| 国产精品视频| 国产在线精品一区二区中文| 国产精品网站一区| 好吊妞**欧美| 夜夜爽www精品| 亚洲欧美精品suv| 久久麻豆一区二区| 欧美极品在线观看| 国产日韩欧美精品综合| 亚洲电影免费观看高清| 亚洲视频在线二区| 性一交一乱一区二区洋洋av| 免费国产自线拍一欧美视频| 国产精品九九| 亚洲第一成人在线| 亚洲欧美中文日韩在线| 男人插女人欧美| 国产精品一区二区三区四区| 在线观看精品一区| 亚洲电影免费观看高清完整版在线观看 | 欧美激情久久久久| 国产欧美在线播放| 亚洲美女免费视频| 欧美一区国产在线| 欧美视频在线观看一区二区| 伊人精品视频| 亚洲欧美日韩国产综合| 欧美激情一区二区三区全黄 | 在线观看一区二区视频| 亚洲欧美日韩精品久久久| 久久久久www| 国产精品亚洲美女av网站| 亚洲高清久久| 久久久久国产精品麻豆ai换脸| 欧美日韩一区三区| 亚洲美女淫视频| 免费永久网站黄欧美| 久久激情一区| 国产欧美激情| 亚洲欧美国产视频| 欧美香蕉大胸在线视频观看| 亚洲激情视频在线播放| 久久五月婷婷丁香社区| 国产精品成人在线| av成人免费| 欧美三级韩国三级日本三斤| 久久精品国产一区二区三区| 国产精品亚洲成人| 亚洲美洲欧洲综合国产一区| 欧美一级淫片aaaaaaa视频| 国产精品chinese| 可以免费看不卡的av网站| 一区二区三区自拍| 老鸭窝毛片一区二区三区| 精品av久久久久电影| 性色av一区二区三区| 国产精品久久久久久久久免费 | 久久精品视频一| 国产精品高清一区二区三区| 亚洲伦理中文字幕| 欧美午夜三级| 性亚洲最疯狂xxxx高清| 欧美日本一区| 亚洲欧洲精品一区二区三区| 亚洲第一网站| 欧美成人精品三级在线观看| 亚洲日本电影在线| 欧美精品在欧美一区二区少妇| av成人天堂| 国产人成一区二区三区影院| 久久精品视频在线看| 亚洲黄色av| 国产精品高潮呻吟久久av黑人| 亚洲欧美视频一区| 国内外成人免费激情在线视频网站 | 欧美视频观看一区| 久久精品一区二区三区四区 | 欧美日韩一区在线播放| 久久九九久精品国产免费直播| 一本久道综合久久精品| 伊伊综合在线| 国产欧美日韩亚洲| 欧美丝袜一区二区三区| 欧美.www| 卡一卡二国产精品| 欧美一区在线看| 亚洲一区二区成人| 亚洲人在线视频| 亚洲国产精品久久| 久久国产直播| 亚洲欧美国产va在线影院| 亚洲精品一区二区在线观看| 伊人久久噜噜噜躁狠狠躁| 国产欧美一区二区三区视频| 国产精品久久久久久久午夜| 欧美精品一区二区三区视频| 免费观看日韩| 久热精品视频在线观看一区| 欧美伊人久久| 久久精品91| 久久不见久久见免费视频1| 午夜精品久久久久影视| 亚洲午夜精品| 国产欧美日韩中文字幕在线| 国产精品超碰97尤物18| 欧美日韩一区二区三区免费| 欧美日韩色婷婷| 欧美日韩在线另类| 国产精品二区二区三区| 国产精品二区在线观看| 国产精品视频不卡| 国产日韩在线视频| 好看的亚洲午夜视频在线| 国产在线拍偷自揄拍精品| 国产综合色产在线精品| 激情国产一区二区| 亚洲黄色一区| 一本色道久久综合精品竹菊| 一区二区av在线| 午夜精品福利一区二区三区av | 国产欧美日韩| 国产亚洲一区二区在线观看| 国产综合一区二区| 亚洲高清在线视频| 一本一道久久综合狠狠老精东影业| 99国产精品久久久久久久| 亚洲一区二区三区四区在线观看| 亚洲欧美综合网| 久久香蕉国产线看观看av| 欧美大片第1页| 国产精品福利网站| 好吊妞**欧美| 日韩一级网站| 欧美一区二区三区四区在线观看| 久久久久国产一区二区| 欧美日本韩国| 狠狠久久亚洲欧美| 亚洲午夜在线观看视频在线| 久久裸体艺术| 国产精品久久影院| 亚洲第一页在线|