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

更多精彩內(nèi)容,歡迎關(guān)注:

視頻號(hào)
視頻號(hào)

抖音
抖音

快手
快手

微博
微博

堆排序算法實(shí)現(xiàn)

文檔

堆排序算法實(shí)現(xiàn)

堆排序(Heapsort)是指利用堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計(jì)的一種排序算法。堆積是一個(gè)近似完全二叉樹的結(jié)構(gòu),并同時(shí)滿足堆積的性質(zhì):即子結(jié)點(diǎn)的鍵值或索引總是小于(或者大于)它的父節(jié)點(diǎn)。堆排序可以說是一種利用堆的概念來排序的選擇排序。
推薦度:
導(dǎo)讀堆排序(Heapsort)是指利用堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計(jì)的一種排序算法。堆積是一個(gè)近似完全二叉樹的結(jié)構(gòu),并同時(shí)滿足堆積的性質(zhì):即子結(jié)點(diǎn)的鍵值或索引總是小于(或者大于)它的父節(jié)點(diǎn)。堆排序可以說是一種利用堆的概念來排序的選擇排序。
.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}

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

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

大頂堆:每個(gè)節(jié)點(diǎn)的值都大于或等于其子節(jié)點(diǎn)的值,在堆排序算法中用于升序排列;小頂堆:每個(gè)節(jié)點(diǎn)的值都小于或等于其子節(jié)點(diǎn)的值,在堆排序算法中用于降序排列;

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

1. 算法步驟

創(chuàng)建一個(gè)堆 H[0……n-1];

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

把堆的尺寸縮小 1,并調(diào)用 shift_down(0),目的是把新的數(shù)組頂端數(shù)據(jù)調(diào)整到相應(yīng)位置;

重復(fù)步驟 2,直到堆的尺寸為 1。

2. 動(dòng)圖演示

代碼實(shí)現(xiàn)JavaScript 實(shí)例 var len; ? ?// 因?yàn)槁暶鞯亩鄠€(gè)函數(shù)都需要數(shù)據(jù)長(zhǎng)度,所以把len設(shè)置成為全局變量function buildMaxHeap(arr) { ? // 建立大頂堆? ? len = arr.length;? ? for (var i = Math.floor(len/2); i >= 0; i--) {? ? ? ? heapify(arr, i);? ? }}function heapify(arr, i) { ? ? // 堆調(diào)整? ? 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實(shí)例 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實(shí)例 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實(shí)例 public class HeapSort implements IArraySort {? ? @Override? ? public int[] sort(int[] sourceArray) throws Exception {? ? ? ? // 對(duì) arr 進(jìn)行拷貝,不改變參數(shù)內(nèi)容? ? ? ? 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 實(shí)例 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實(shí)例 #include #include void swap(int *a, int *b) {? ? int temp = *b;? ? *b = *a;? ? *a = temp;}void max_heapify(int arr[], int start, int end) {? ? // 建立父節(jié)點(diǎn)指標(biāo)和子節(jié)點(diǎn)指標(biāo)? ? int dad = start;? ? int son = dad * 2 + 1;? ? while (son <= end) { // 若子節(jié)點(diǎn)指標(biāo)在範(fàn)圍內(nèi)才做比較? ? ? ? if (son + 1 <= end && arr[son] < arr[son + 1]) // 先比較兩個(gè)子節(jié)點(diǎn)大小,選擇最大的? ? ? ? ? ? son++;? ? ? ? if (arr[dad] > arr[son]) //如果父節(jié)點(diǎn)大於子節(jié)點(diǎn)代表調(diào)整完畢,直接跳出函數(shù)? ? ? ? ? ? return;? ? ? ? else { // 否則交換父子內(nèi)容再繼續(xù)子節(jié)點(diǎn)和孫節(jié)點(diǎn)比較? ? ? ? ? ? swap(&arr[dad], &arr[son]);? ? ? ? ? ? dad = son;? ? ? ? ? ? son = dad * 2 + 1;? ? ? ? }? ? }}void heap_sort(int arr[], int len) {? ? int i;? ? // 初始化,i從最後一個(gè)父節(jié)點(diǎn)開始調(diào)整? ? for (i = len / 2 - 1; i >= 0; i--)? ? ? ? max_heapify(arr, i, len - 1);? ? // 先將第一個(gè)元素和已排好元素前一位做交換,再重新調(diào)整,直到排序完畢? ? 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++實(shí)例 #include #include using namespace std;void max_heapify(int arr[], int start, int end) {? ? // 建立父節(jié)點(diǎn)指標(biāo)和子節(jié)點(diǎn)指標(biāo)? ? int dad = start;? ? int son = dad * 2 + 1;? ? while (son <= end) { // 若子節(jié)點(diǎn)指標(biāo)在範(fàn)圍內(nèi)才做比較? ? ? ? if (son + 1 <= end && arr[son] < arr[son + 1]) // 先比較兩個(gè)子節(jié)點(diǎn)大小,選擇最大的? ? ? ? ? ? son++;? ? ? ? if (arr[dad] > arr[son]) // 如果父節(jié)點(diǎn)大於子節(jié)點(diǎn)代表調(diào)整完畢,直接跳出函數(shù)? ? ? ? ? ? return;? ? ? ? else { // 否則交換父子內(nèi)容再繼續(xù)子節(jié)點(diǎn)和孫節(jié)點(diǎn)比較? ? ? ? ? ? swap(arr[dad], arr[son]);? ? ? ? ? ? dad = son;? ? ? ? ? ? son = dad * 2 + 1;? ? ? ? }? ? }}void heap_sort(int arr[], int len) {? ? // 初始化,i從最後一個(gè)父節(jié)點(diǎn)開始調(diào)整? ? for (int i = len / 2 - 1; i >= 0; i--)? ? ? ? max_heapify(arr, i, len - 1);? ? // 先將第一個(gè)元素和已經(jīng)排好的元素前一位做交換,再?gòu)男抡{(diào)整(剛調(diào)整的元素之前的元素),直到排序完畢? ? 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

以下是熱心網(wǎng)友對(duì)堆排序算法的補(bǔ)充,僅供參考:

熱心網(wǎng)友提供的補(bǔ)充1:

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

/// 
/// 堆排序
/// 
/// 待排序數(shù)組
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];
    }
    // 初始數(shù)據(jù)建堆(從含最后一個(gè)結(jié)點(diǎn)的子樹開始構(gòu)建,依次向前,形成整個(gè)二叉堆)
    for (int i = vCount / 2; i >= 1; i--)
    {
        Restore(tempKey, i, vCount);
    }
    // 不斷輸出堆頂元素、重構(gòu)堆,進(jìn)行排序
    for (int i = vCount; i > 1; i--)
    {
        int temp = tempKey[i];
        tempKey[i] = tempKey[1];
        tempKey[1] = temp;
        Restore(tempKey, 1, i - 1);
    }
    //排序結(jié)果
    for (int i = 0; i < vCount; i++)
    {
        arr[i] = tempKey[i + 1];
    }
}
/// 
/// 二叉堆的重構(gòu)(針對(duì)于已構(gòu)建好的二叉堆首尾互換之后的重構(gòu))
/// 
/// 
/// 根結(jié)點(diǎn)j
/// 結(jié)點(diǎn)數(shù)
static void Restore(int[] arr, int rootNode, int nodeCount)
{
    while (rootNode <= nodeCount / 2) // 保證根結(jié)點(diǎn)有子樹
    {
        //找出左右兒子的最大值
        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;
        }
    }
}

熱心網(wǎng)友提供的補(bǔ)充2:

堆排序是不穩(wěn)定的排序!

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

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

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

/**構(gòu)建一個(gè)大頂堆(完全二叉樹 ) 
* 從  最后一個(gè)非葉子節(jié)點(diǎn)  開始,若父節(jié)點(diǎn)小于子節(jié)點(diǎn),則互換他們兩的位置。然后依次從右至左,從下到上進(jìn)行! 
* 最后一個(gè)非葉子節(jié)點(diǎn),它的葉子節(jié)點(diǎn) 必定包括了最后一個(gè)(葉子)節(jié)點(diǎn),所以 最后一個(gè)非葉子節(jié)點(diǎn)是 a[(n+1)/2-1] 
 
* @param a 
* @param lastIndex 這個(gè)數(shù)組的最后一個(gè)元素 
*/
static void maxHeap(int a[], int lastIndex) {
    for (int i = (lastIndex + 1) / 2 - 1; i >= 0; i--) {
       //反正 堆排序不穩(wěn)定,先比較父與左子,大則交換;與右子同理。(不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;
}
以上為堆排序算法詳細(xì)介紹,插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序、基數(shù)排序等排序算法各有優(yōu)缺點(diǎn),用一張圖概括:

關(guān)于時(shí)間復(fù)雜度

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

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

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

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

關(guān)于穩(wěn)定性

穩(wěn)定的排序算法:冒泡排序、插入排序、歸并排序和基數(shù)排序。

不是穩(wěn)定的排序算法:選擇排序、快速排序、希爾排序、堆排序。

名詞解釋:

n:數(shù)據(jù)規(guī)模

k:"桶"的個(gè)數(shù)

In-place:占用常數(shù)內(nèi)存,不占用額外內(nèi)存

Out-place:占用額外內(nèi)存

穩(wěn)定性:排序后 2 個(gè)相等鍵值的順序和排序之前它們的順序相同

文檔

堆排序算法實(shí)現(xiàn)

堆排序(Heapsort)是指利用堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計(jì)的一種排序算法。堆積是一個(gè)近似完全二叉樹的結(jié)構(gòu),并同時(shí)滿足堆積的性質(zhì):即子結(jié)點(diǎn)的鍵值或索引總是小于(或者大于)它的父節(jié)點(diǎn)。堆排序可以說是一種利用堆的概念來排序的選擇排序。
推薦度:
為你推薦
資訊專欄
熱門視頻
相關(guān)推薦
快速排序算法圖解 與動(dòng)物有關(guān)的古詩 歸并排序是穩(wěn)定排序嗎 希爾排序過程 選擇排序c語言 基數(shù)排序法 冒泡排序法例子 桶排序算法的代碼 計(jì)數(shù)排序算法實(shí)例 計(jì)數(shù)排序算法python c語言數(shù)據(jù)結(jié)構(gòu)堆排序算法 實(shí)現(xiàn)快速排序算法 歸并排序算法過程圖解 希爾排序的算法過程 選擇排序是穩(wěn)定的嗎 基數(shù)排序的詳細(xì)過程 冒泡排序代碼解讀 桶排序算法c語言 什么是計(jì)數(shù)排序 堆排序初始堆 計(jì)數(shù)排序 桶排序思想 冒泡排序算法是幾層循環(huán) 基數(shù)排序是一種基于 簡(jiǎn)單選擇排序算法 希爾排序法實(shí)例 歸并排序奇數(shù)個(gè)怎么排 有關(guān)動(dòng)物的古詩 快速排序c++代碼 堆排序第一趟怎么求 c語言計(jì)數(shù)排序算法 桶排序基本算法 c語言冒泡排序法流程圖 基數(shù)排序算法數(shù)據(jù)結(jié)構(gòu) 選擇排序代碼 希爾排序算法vb 歸并排序算法流程圖 描寫燕子的經(jīng)典詩句 踏青詩詞佳句 含有動(dòng)物的古詩
Top 亚洲国产第一站精品蜜芽_亚洲AV无码精品色午夜果冻不卡_国产香蕉九九久久精品免费_国产精品亚洲专区无码不卡
<sup id="m40ya"></sup>
  • 
    
  • <kbd id="m40ya"></kbd>
    <samp id="m40ya"></samp>
    <ul id="m40ya"></ul>
  • 国产精品永久免费视频| 亚洲一区欧美二区| 欧美日韩精品二区| 欧美在线视频免费播放| 夜夜嗨av色一区二区不卡| 国产综合18久久久久久| 国产精品福利网站| 欧美激情日韩| 欧美激情一区二区在线 | 国产精品一区二区三区久久久| 免费观看30秒视频久久| 久久久久久网站| 欧美一区二区三区免费看| 亚洲线精品一区二区三区八戒| 亚洲欧洲综合| 日韩视频在线一区二区| 亚洲欧洲日本在线| 亚洲欧洲综合另类| 日韩午夜视频在线观看| 亚洲乱码一区二区| 亚洲激情在线播放| 亚洲精品网站在线播放gif| 最新亚洲视频| 亚洲美女福利视频网站| 日韩午夜激情av| 一区二区三区四区国产| 一区二区欧美激情| 亚洲欧美激情一区| 欧美中文在线视频| 免费亚洲电影| 欧美日韩成人在线播放| 国产精品福利网站| 国产精品毛片在线| 国产综合视频| 亚洲精品久久久久| 亚洲中字在线| 久久福利毛片| 免费在线观看日韩欧美| 欧美韩日一区| 国产精品久久久久久久久久久久| 国产精品五月天| 精品成人一区二区| 一本高清dvd不卡在线观看| 99riav国产精品| 欧美一级黄色网| 美女黄网久久| 国产精品草莓在线免费观看| 国产一区二区三区视频在线观看| 激情五月***国产精品| 日韩一区二区精品葵司在线| 性欧美超级视频| 欧美va亚洲va国产综合| 国产精品久久久久77777| 激情久久久久久久| 一区二区免费看| 久久国产精品第一页| 欧美精品播放| 国产亚洲激情在线| 亚洲精品孕妇| 久久精品视频在线| 国产精品mm| 亚洲人www| 久久精品青青大伊人av| 欧美日韩精品免费观看视频| 狠狠色狠狠色综合系列| 亚洲视频免费看| 国产精品v亚洲精品v日韩精品 | 日韩视频一区二区在线观看| 欧美一区二区三区日韩| 欧美精品 日韩| 狠狠干综合网| 先锋影音国产精品| 欧美精品18videos性欧美| 狠狠狠色丁香婷婷综合久久五月| 一区二区三区视频在线看| 女人香蕉久久**毛片精品| 国产欧美一区二区精品婷婷| 亚洲深夜影院| 欧美精品黄色| 亚洲激情社区| 美国三级日本三级久久99| 国产专区精品视频| 久久大综合网| 国产毛片久久| 性欧美暴力猛交69hd| 国产精品亚洲一区二区三区在线| 一本一本久久a久久精品牛牛影视| 免费日韩成人| 亚洲精品国产精品乱码不99 | 在线观看一区| 久久综合色播五月| 在线观看国产欧美| 久久一区激情| 亚洲激情国产精品| 欧美日本视频在线| 一区二区三区精品视频在线观看| 欧美日韩在线视频一区| 亚洲一区二区综合| 国产精品专区h在线观看| 亚洲男同1069视频| 国产日韩欧美一区在线 | 国产欧美一区二区精品性色| 亚洲综合视频网| 国产裸体写真av一区二区| 欧美一区=区| 永久久久久久| 欧美日本在线播放| 亚洲专区一区二区三区| 国产亚洲aⅴaaaaaa毛片| 久久精品卡一| 亚洲国产精品传媒在线观看| 欧美另类极品videosbest最新版本 | 亚洲一区二区三区成人在线视频精品 | 亚洲四色影视在线观看| 国产精品视频一区二区高潮| 久久不射网站| 亚洲人成网站在线播| 欧美性大战久久久久久久蜜臀| 午夜欧美理论片| 亚洲国产小视频| 国产精品久久久久影院色老大 | 在线看片日韩| 欧美视频一区二区三区…| 欧美一区二区三区婷婷月色 | 欧美日韩免费在线| 欧美一区二区在线播放| 91久久亚洲| 国产视频久久久久| 欧美日韩激情小视频| 欧美成人精品一区二区三区| 亚洲免费在线观看| 91久久精品久久国产性色也91| 国产精品福利在线观看| 麻豆国产精品一区二区三区| 亚洲免费在线| 亚洲日本视频| 国产在线欧美日韩| 国产精品久久99| 欧美美女bbbb| 狂野欧美激情性xxxx欧美| 亚洲欧美一区二区三区极速播放 | 久久精品视频在线| 亚洲一区二区三区精品视频| 亚洲第一在线视频| 国产伦一区二区三区色一情| 欧美精品18+| 免费短视频成人日韩| 久久久91精品国产一区二区三区 | 亚洲欧美日韩在线综合| 亚洲美女在线国产| 亚洲黄色小视频| 亚洲一区二区三区成人在线视频精品| 激情另类综合| 海角社区69精品视频| 国产精品一区二区久久| 欧美视频中文一区二区三区在线观看 | 国产精品乱码| 欧美裸体一区二区三区| 欧美成人一区在线| 欧美成人免费小视频| 另类综合日韩欧美亚洲| 久久久精品午夜少妇| 久久精品国产欧美激情| 午夜在线视频观看日韩17c| 亚洲一区二区三区四区视频| 日韩一级免费| 在线视频精品一区| 在线午夜精品自拍| 亚洲午夜在线观看视频在线| 在线视频精品一区| 亚洲一级免费视频| 亚洲欧美在线网| 欧美一级专区| 久久久国产精品亚洲一区 | 亚洲精品国产精品国自产在线| 亚洲高清资源综合久久精品| 亚洲高清成人| 99精品国产高清一区二区| 亚洲香蕉网站| 欧美一区二区三区男人的天堂 | 国产一区二区精品久久| 狠狠做深爱婷婷久久综合一区| 在线观看91精品国产入口| 亚洲欧洲在线播放| 中文在线一区| 久久国产精品99国产精| 欧美成人精品福利| 国产精品黄色| 韩日欧美一区| 99v久久综合狠狠综合久久| 亚洲视屏一区| 久久久视频精品| 欧美日本在线| 国产婷婷色一区二区三区| 亚洲国产成人精品女人久久久 | 欧美一区二区三区四区高清 | 亚洲精品影院| 欧美一区二区性| 欧美激情精品久久久久久大尺度| 国产精品成人一区二区网站软件 |