国产精品亚洲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快速排序算法代碼 歸并排序定義 希爾排序過程圖解 選擇排序算法代碼 基數排序是什么 冒泡排序怎么優化 桶排序算法原理 計數排序基本原理 堆排序法 快速排序算法c 歸并排序算法的分治方法 希爾排序c語言實現 選擇排序過程 基數排序的基數什么意思 冒泡排序例子 桶排序原理 計數排序python實現 堆排序算法操作 快速排序算法例題 歸并排序的過程舉例 計數排序java 排序算法桶排 冒泡排序圖解算法 基數排序算法c語言 選擇排序圖解 希爾排序流程圖 外部排序歸并算法 快速排序算法思路 堆排序怎么建立初始堆 計數排序python 桶排序代碼 冒泡排序的改進算法 基數排序和桶排序 選擇排序法c語言 希爾排序的詳細過程 歸并排序算法java java實現快速排序算法 堆排序是一種什么排序 計數排序的應用場景 桶排序的基本思想
Top 国产精品亚洲AV三区_国产精品日本一区二区在线播放_国产成人无码久久久精品一_性感美女视频在线观看免费精品
<strike id="cakm0"></strike>
  • <button id="cakm0"><dl id="cakm0"></dl></button>
  • <samp id="cakm0"><tbody id="cakm0"></tbody></samp>
    <samp id="cakm0"><pre id="cakm0"></pre></samp><ul id="cakm0"></ul>
    <strike id="cakm0"></strike>
    <li id="cakm0"></li>
  • <ul id="cakm0"></ul>
  • 影音先锋中文字幕一区| 精品88久久久久88久久久| 欧美日韩国内自拍| 欧美日韩精品久久久| 欧美视频中文字幕在线| 国产精品夜夜嗨| 国内视频一区| 亚洲美女诱惑| 亚洲欧美日韩另类精品一区二区三区 | 一本色道久久综合亚洲精品高清| 亚洲精品之草原avav久久| 亚洲午夜视频| 久久久免费观看视频| 欧美日韩国产精品一区| 国产亚洲一级| 99精品视频一区二区三区| 欧美一区午夜精品| 免费av成人在线| 国产精品主播| 日韩天堂av| 久久久久免费| 国产精品乱码一区二三区小蝌蚪| 激情综合激情| 欧美亚洲色图校园春色| 欧美国产在线视频| 国内精品嫩模av私拍在线观看 | 国产精品久久久久久av福利软件 | 亚洲免费中文| 欧美久久久久久久久久| 国产亚洲免费的视频看| 亚洲网站在线播放| 欧美高潮视频| 伊人久久成人| 久久久av毛片精品| 国产精品永久免费| 一区二区三区日韩精品| 欧美精品久久久久久久| 136国产福利精品导航网址| 午夜视频在线观看一区| 欧美网站在线观看| 亚洲乱码精品一二三四区日韩在线| 久久在线视频在线| 国产日韩欧美综合在线| 亚洲欧美日韩精品综合在线观看| 欧美区日韩区| 亚洲精品一区二区三区四区高清 | 亚洲欧美在线磁力| 欧美日韩极品在线观看一区| 亚洲三级电影全部在线观看高清| 久久久在线视频| 有码中文亚洲精品| 久久久一本精品99久久精品66| 国产精品婷婷| 欧美一区日本一区韩国一区| 国产日韩欧美三级| 欧美在线亚洲一区| 一区二区三区在线观看欧美| 久久久久久久尹人综合网亚洲| 国产一区自拍视频| 久久手机免费观看| 亚洲高清不卡在线观看| 欧美成人免费观看| 亚洲美女黄网| 国产精品福利在线| 欧美一级在线亚洲天堂| 国产亚洲精品美女| 久久久免费观看视频| 亚洲精品乱码久久久久久日本蜜臀 | 欧美精品一区二区三区久久久竹菊 | 国产综合色产| 老牛国产精品一区的观看方式| ●精品国产综合乱码久久久久| 欧美xart系列高清| 一区二区日韩免费看| 国产精品入口66mio| 欧美一区二区视频在线观看2020| 狠狠爱www人成狠狠爱综合网 | 一区二区三区日韩精品视频| 国产精品久久久久久亚洲调教 | 欧美黄色日本| 亚洲综合视频网| 精品999在线观看| 欧美精品1区2区| 亚洲综合导航| 亚洲国产精品一区| 欧美视频1区| 久久国产精品久久久久久| 亚洲国产欧美在线人成| 欧美性大战久久久久久久| 久久不射电影网| 亚洲美女黄网| 狠狠色噜噜狠狠色综合久| 欧美视频久久| 美玉足脚交一区二区三区图片| 亚洲图片自拍偷拍| 在线国产欧美| 国产麻豆9l精品三级站| 欧美成人精品| 久久精品国产亚洲高清剧情介绍| 亚洲免费观看| 精品1区2区| 国产欧美一区二区三区沐欲| 欧美久色视频| 奶水喷射视频一区| 久久国产一区二区三区| 在线一区二区三区做爰视频网站| 一区二区三区在线不卡| 国产精品色婷婷久久58| 欧美日韩精品中文字幕| 欧美大片第1页| 久久久999| 香蕉成人伊视频在线观看| 99精品欧美一区| 亚洲黄色在线观看| 狠狠色综合网站久久久久久久| 国产精品久久久久国产精品日日 | 亚洲一区影院| 夜夜嗨一区二区三区| 亚洲国产综合在线| 国产亚洲激情在线| 国产精品分类| 国产精品mm| 欧美日韩综合视频网址| 欧美精品激情在线| 欧美激情片在线观看| 久久中文字幕一区二区三区| 久久福利精品| 久久狠狠婷婷| 久久久国产精品亚洲一区| 欧美一级黄色网| 久久av一区| 久久精品视频导航| 久久久久久久久久久成人| 久久精品国语| 久久资源在线| 欧美不卡福利| 欧美精品成人在线| 欧美日韩一区二区精品| 欧美色123| 国产精品视屏| 国内综合精品午夜久久资源| 在线播放一区| 亚洲理论电影网| 亚洲少妇一区| 欧美一区二区观看视频| 久久久91精品| 欧美大尺度在线| 欧美三级电影网| 国产伦精品一区二区三区高清版 | 国产自产在线视频一区| 极品少妇一区二区三区精品视频| 在线免费观看日本欧美| 99国产精品久久久久久久成人热| 在线亚洲免费| 欧美在线免费视屏| 免费不卡在线观看av| 欧美日本亚洲| 国产亚洲精品bt天堂精选| 在线免费观看日本欧美| 一本一本大道香蕉久在线精品| 香蕉成人伊视频在线观看| 可以免费看不卡的av网站| 欧美精品七区| 国产欧美日韩综合一区在线观看 | 好看的av在线不卡观看| 亚洲精品综合在线| 午夜综合激情| 欧美成人国产| 国产精品区一区| 亚洲国产免费| 欧美一区二区精品久久911| 欧美成人精品一区二区三区| 国产精品青草久久| 亚洲国产一区二区a毛片| 亚洲欧美精品在线观看| 欧美激情91| 好看的日韩视频| 亚洲在线免费| 欧美国产第一页| 国产色爱av资源综合区| 99精品免费| 免费观看日韩av| 国产情人综合久久777777| 亚洲老司机av| 老妇喷水一区二区三区| 国产精品久久久久永久免费观看 | 欧美一级大片在线免费观看| 欧美精品粉嫩高潮一区二区| 黄色亚洲在线| 欧美一区二区视频97| 欧美视频在线视频| 亚洲三级影院| 美女视频一区免费观看| 国产色视频一区| 亚洲午夜av| 欧美理论在线播放| 亚洲第一网站免费视频| 久久久久久一区二区| 国产欧美一区二区视频| 亚洲视频中文字幕|