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

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

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

抖音
抖音

快手
快手

微博
微博

堆排序怎么排

文檔

堆排序怎么排

堆排序(Heapsort)是指利用堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計(jì)的一種排序算法。堆積是一個(gè)近似完全二叉樹(shù)的結(jié)構(gòu),并同時(shí)滿足堆積的性質(zhì):即子結(jié)點(diǎn)的鍵值或索引總是小于(或者大于)它的父節(jié)點(diǎn)。堆排序可以說(shuō)是一種利用堆的概念來(lái)排序的選擇排序。
推薦度:
導(dǎo)讀堆排序(Heapsort)是指利用堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計(jì)的一種排序算法。堆積是一個(gè)近似完全二叉樹(shù)的結(jié)構(gòu),并同時(shí)滿足堆積的性質(zhì):即子結(jié)點(diǎn)的鍵值或索引總是小于(或者大于)它的父節(jié)點(diǎn)。堆排序可以說(shuō)是一種利用堆的概念來(lái)排序的選擇排序。
.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ù)很大,一次不能容納全部的排序記錄,在排序過(guò)程中需要訪問(wèn)外存。常見(jiàn)的內(nèi)部排序算法有:插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序、基數(shù)排序等。以下是堆排序算法:

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

大頂堆:每個(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)開(kāi)始調(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)開(kāi)始調(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:

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

/// 
/// 堆排序
/// 
/// 待排序數(shù)組
static void HeapSort(int[] arr)
{
    int vCount = arr.Length;
    int[] tempKey = new int[vCount + 1];
    // 元素索引從1開(kāi)始
    for (int i = 0; i < vCount; i++)
    {
        tempKey[i + 1] = arr[i];
    }
    // 初始數(shù)據(jù)建堆(從含最后一個(gè)結(jié)點(diǎn)的子樹(shù)開(kāi)始構(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)有子樹(shù)
    {
        //找出左右兒子的最大值
        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è)人寫(xiě)的 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--無(wú)序數(shù)組尺寸減少了 
    }  
    return a;
}

/**構(gòu)建一個(gè)大頂堆(完全二叉樹(shù) ) 
* 從  最后一個(gè)非葉子節(jié)點(diǎn)  開(kāi)始,若父節(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)) 排序 各類(lèi)簡(jiǎn)單排序:直接插入、直接選擇和冒泡排序。

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

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

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

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

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

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

名詞解釋?zhuān)?/p>

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

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

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

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

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

文檔

堆排序怎么排

堆排序(Heapsort)是指利用堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計(jì)的一種排序算法。堆積是一個(gè)近似完全二叉樹(shù)的結(jié)構(gòu),并同時(shí)滿足堆積的性質(zhì):即子結(jié)點(diǎn)的鍵值或索引總是小于(或者大于)它的父節(jié)點(diǎn)。堆排序可以說(shuō)是一種利用堆的概念來(lái)排序的選擇排序。
推薦度:
為你推薦
資訊專(zhuān)欄
熱門(mén)視頻
相關(guān)推薦
關(guān)于蘭花的詩(shī)句兩句 java快速排序 關(guān)于寫(xiě)小動(dòng)物的詩(shī) 描寫(xiě)夏天的詩(shī)句簡(jiǎn)單 踏青詩(shī)句最出名詩(shī)句 描寫(xiě)燕子的古詩(shī)絕句 歸并排序python 希爾排序 選擇排序法 基數(shù)排序怎么排 冒泡排序python 關(guān)于放風(fēng)箏的古詩(shī) 桶式排序 計(jì)數(shù)排序算法c++實(shí)現(xiàn) 堆排序法排序怎么排 關(guān)于蘭花的詩(shī)句古詩(shī) 快速排序c語(yǔ)言 兩句關(guān)于動(dòng)物的詩(shī)句 踏青的詩(shī)詞名句 含有燕子的詩(shī)句 描寫(xiě)元宵節(jié)的唯美詩(shī)詞 如何按照計(jì)數(shù)進(jìn)行排序 桶排序 寫(xiě)與風(fēng)箏有關(guān)的詩(shī) 冒泡排序python代碼 基數(shù)排序 選擇排序 插入排序 java希爾排序算法 歸并排序c語(yǔ)言 積累描寫(xiě)燕子的詩(shī)句 出門(mén)踏青的詩(shī)句 5首夏天的古詩(shī)簡(jiǎn)單 描寫(xiě)小動(dòng)物的古詩(shī) 快速排序java 蘭花的詩(shī)詞佳句 元宵節(jié)代表詩(shī)詞 托爾斯泰的名言 列寧的名言 關(guān)于樂(lè)觀的名言
Top 亚洲国产第一站精品蜜芽_亚洲AV无码精品色午夜果冻不卡_国产香蕉九九久久精品免费_国产精品亚洲专区无码不卡
<sup id="m40ya"></sup>
  • 
    
  • <kbd id="m40ya"></kbd>
    <samp id="m40ya"></samp>
    <ul id="m40ya"></ul>
  • 国产欧美精品久久| 一本大道av伊人久久综合| 久久久久久九九九九| 亚洲免费观看视频| 国产又爽又黄的激情精品视频| 欧美日韩国产精品一区| 欧美在线免费观看视频| 99视频热这里只有精品免费| 尤物99国产成人精品视频| 国产精品网站在线播放| 欧美日本亚洲韩国国产| 欧美1区2区视频| 久久婷婷国产综合尤物精品| 9色porny自拍视频一区二区| 亚洲国产一区二区a毛片| 国产在线拍揄自揄视频不卡99| 欧美精品激情在线| 欧美高清hd18日本| 男人的天堂成人在线| 久久综合国产精品台湾中文娱乐网| 午夜日韩电影| 亚洲欧美日韩另类精品一区二区三区| 亚洲精品免费在线| 亚洲精选在线| 一区二区三区鲁丝不卡| 一区二区免费在线播放| 一区二区国产精品| 亚洲一区二区高清视频| 亚洲一区国产视频| 午夜一区二区三视频在线观看| 亚洲欧美日韩天堂一区二区| 亚洲自拍偷拍一区| 欧美在线关看| 久热精品视频在线观看一区| 免费高清在线视频一区·| 免费人成网站在线观看欧美高清| 久久尤物视频| 欧美人与禽性xxxxx杂性| 欧美美女视频| 国产精品久久99| 国产热re99久久6国产精品| 国产在线播放一区二区三区| 娇妻被交换粗又大又硬视频欧美| 亚洲电影在线播放| 一本久久精品一区二区| 亚洲欧美久久久久一区二区三区| 欧美在线不卡| 欧美二区不卡| 国产精品系列在线| 雨宫琴音一区二区在线| 在线亚洲精品| 久久久精品国产免费观看同学| 久久综合五月| 国产精品jizz在线观看美国 | 一区二区日韩精品| 欧美伊人久久久久久午夜久久久久| 久久噜噜噜精品国产亚洲综合| 欧美国产高清| 国产亚洲一区在线播放| 亚洲三级免费| 久久久久久电影| 欧美午夜精品理论片a级大开眼界 欧美午夜精品理论片a级按摩 | 国产精品免费一区二区三区观看 | 欧美在线视频一区| 欧美女同在线视频| 国内精品**久久毛片app| 日韩视频一区二区在线观看 | 久久精品免费电影| 欧美日韩在线一区二区| 在线不卡欧美| 性亚洲最疯狂xxxx高清| 欧美精品一区二区三区在线看午夜| 国产精品永久免费观看| 一区二区三区视频在线| 裸体一区二区| 黄色成人av网站| 亚洲免费视频一区二区| 欧美精品一区二区三区久久久竹菊 | 永久免费精品影视网站| 亚洲综合国产激情另类一区| 欧美日韩在线一二三| 亚洲国产综合在线看不卡| 欧美有码在线观看视频| 欧美色图天堂网| 亚洲美女在线国产| 欧美成人综合一区| 亚洲高清激情| 麻豆久久精品| 狠狠色综合色区| 久久久久久久一区二区| 国产亚洲va综合人人澡精品| 亚洲欧美日韩系列| 国产精品稀缺呦系列在线| 亚洲一二三四区| 欧美亚一区二区| 亚洲午夜电影网| 国产精品久久看| 午夜精品久久久久久久久| 国产精品久久久久天堂| 亚洲在线视频网站| 国产精品最新自拍| 午夜免费日韩视频| 国产综合在线看| 老牛影视一区二区三区| 亚洲国产高清一区二区三区| 欧美大片在线观看| 日韩视频在线一区| 国产精品va| 欧美一级网站| 亚洲电影视频在线| 欧美精品一区在线观看| 亚洲综合激情| 红杏aⅴ成人免费视频| 免费成人网www| 在线午夜精品自拍| 国产欧美一区二区三区另类精品| 久久黄色小说| 亚洲美女视频| 国产亚洲综合精品| 欧美精品在线免费播放| 亚洲女优在线| 亚洲风情亚aⅴ在线发布| 欧美日韩国产一中文字不卡| 亚洲男女毛片无遮挡| 激情综合色丁香一区二区| 欧美精品国产一区| 欧美亚洲免费高清在线观看| 伊人蜜桃色噜噜激情综合| 欧美日韩播放| 久久精品二区三区| 99精品黄色片免费大全| 国产综合久久久久久| 欧美理论电影在线播放| 欧美一区二区高清| 一区二区欧美视频| 亚洲成人直播| 国产美女高潮久久白浆| 欧美精品在线观看91| 欧美在线视频在线播放完整版免费观看 | 黑丝一区二区三区| 欧美日韩中文| 麻豆乱码国产一区二区三区| 性久久久久久久| 99ri日韩精品视频| 激情欧美一区| 国产欧美日韩另类一区| 欧美日韩dvd在线观看| 久久久青草青青国产亚洲免观| 美女久久一区| 性亚洲最疯狂xxxx高清| 亚洲视频一区二区免费在线观看| 激情丁香综合| 国模大胆一区二区三区| 国产精品午夜春色av| 欧美日本在线看| 欧美精品xxxxbbbb| 欧美成人综合网站| 玖玖在线精品| 美女网站久久| 美女国产精品| 久热精品在线| 欧美高清在线| 欧美激情在线观看| 欧美精品一区三区| 欧美经典一区二区三区| 欧美大片国产精品| 牛牛影视久久网| 欧美精品videossex性护士| 久久综合九色综合欧美就去吻 | 国产亚洲一区在线| 国产香蕉久久精品综合网| 国产区亚洲区欧美区| 国产午夜精品久久久久久久| 国产午夜精品久久久久久免费视| 国产精品视频yy9099| 国产三区精品| 尤妮丝一区二区裸体视频| 最新国产拍偷乱拍精品| 亚洲啪啪91| 99国产成+人+综合+亚洲欧美| 一区二区欧美激情| 欧美一区二区女人| 久久久视频精品| 欧美岛国激情| 国产精品成人一区二区| 国产欧美在线看| 一区免费观看| 一区二区三区 在线观看视频| 亚洲天堂成人在线视频| 欧美一区三区三区高中清蜜桃| 欧美在线www| 欧美国产一区二区| 国产精品一级二级三级| 伊人久久大香线蕉av超碰演员| 亚洲国产另类久久精品| 亚洲深爱激情| 久久人人爽人人| 国产精品高潮呻吟视频| 黄色成人在线免费| 中文av字幕一区|