国产精品亚洲AV三区_国产精品日本一区二区在线播放_国产成人无码久久久精品一_性感美女视频在线观看免费精品

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

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

抖音
抖音

快手
快手

微博
微博

當(dāng)前位置:首頁 科技百科 堆是什么排序

堆是什么排序

文檔

堆是什么排序

堆排序(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)排好的元素前一位做交換,再從新調(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è)相等鍵值的順序和排序之前它們的順序相同

文檔

堆是什么排序

堆排序(Heapsort)是指利用堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計(jì)的一種排序算法。堆積是一個(gè)近似完全二叉樹的結(jié)構(gòu),并同時(shí)滿足堆積的性質(zhì):即子結(jié)點(diǎn)的鍵值或索引總是小于(或者大于)它的父節(jié)點(diǎn)。堆排序可以說是一種利用堆的概念來排序的選擇排序。
推薦度:
為你推薦
資訊專欄
熱門視頻
相關(guān)推薦
快速排序法怎么排 歸并排序算法c++實(shí)現(xiàn) 希爾排序算法代碼 選擇排序算法的時(shí)間復(fù)雜度 基數(shù)排序的兩個(gè)基本過程是 冒泡排序算法思想 c桶排序 堆排序算法例子 編寫快速排序算法 歸并排序算法時(shí)間復(fù)雜度 希爾排序圖解流程圖 描述選擇排序算法 基數(shù)排序算法的基本思想 冒泡排序法流程圖 桶排序算法c 堆排序算法思想 快速排序思想 歸并排序的具體過程 希爾排序怎么排序 簡(jiǎn)單選擇排序流程圖 c語言桶排序 冒泡排序算法流程圖 基數(shù)排序過程 選擇排序算法的思路 希爾排序的基本原理 歸并排序的過程舉例 快速排序算法例題 堆排序算法操作 計(jì)數(shù)排序python實(shí)現(xiàn) 桶排序原理 冒泡排序例子 基數(shù)排序的基數(shù)什么意思 選擇排序過程 希爾排序c語言實(shí)現(xiàn) 歸并排序算法的分治方法 快速排序算法c 堆排序法 計(jì)數(shù)排序基本原理 桶排序算法原理 冒泡排序怎么優(yōu)化
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>
  • 国产精品亚洲精品| 久久激情中文| 国产精品入口福利| 欧美激情精品久久久久久蜜臀| 亚洲欧美国产毛片在线| 亚洲欧洲综合| 亚洲第一精品夜夜躁人人爽| 国产精品外国| 国产精品激情| 国产精品porn| 国产精品国产一区二区| 欧美激情亚洲另类| 欧美高清视频一区| 免费91麻豆精品国产自产在线观看| 亚洲欧美日韩综合aⅴ视频| 亚洲免费精品| 99精品国产热久久91蜜凸| 亚洲激情六月丁香| 亚洲激情女人| 亚洲免费观看高清在线观看| 曰韩精品一区二区| 亚洲国产精品悠悠久久琪琪| 在线播放视频一区| 亚洲国产合集| 99re热这里只有精品视频| 日韩天堂av| 亚洲视频免费观看| 亚洲欧美日韩精品久久久久| 亚洲一区精品视频| 性亚洲最疯狂xxxx高清| 久久9热精品视频| 久久人人爽爽爽人久久久| 久久夜色精品国产亚洲aⅴ| 久久艳片www.17c.com| 另类专区欧美制服同性| 欧美国产一区二区三区激情无套| 欧美精品一区二| 欧美特黄a级高清免费大片a级| 国产精品播放| 国产视频精品va久久久久久| 在线成人激情黄色| 一本色道久久综合狠狠躁篇怎么玩| 中国av一区| 久久久91精品| 欧美区日韩区| 国内成人精品一区| 日韩视频免费看| 欧美一区二区三区视频免费播放| 久久综合影音| 国产精品对白刺激久久久| 韩日欧美一区二区三区| 亚洲欧洲一级| 欧美一级在线视频| 欧美国产乱视频| 国产日产欧产精品推荐色| 亚洲国产精品一区| 欧美一级夜夜爽| 欧美日韩精品| 伊甸园精品99久久久久久| 亚洲天堂黄色| 欧美成人亚洲成人| 国产日韩在线看| 99人久久精品视频最新地址| 久久精品人人| 国产精品日本一区二区| 亚洲激情欧美| 久久婷婷久久| 国产一区日韩欧美| 亚洲免费一区二区| 欧美人与禽性xxxxx杂性| 伊人影院久久| 欧美在线一二三区| 国产精品高清在线| 99国内精品久久| 欧美电影在线观看| 雨宫琴音一区二区在线| 午夜精品一区二区三区在线视| 欧美日韩国产综合视频在线观看中文 | 亚洲综合欧美日韩| 欧美成人久久| 伊人成人开心激情综合网| 午夜免费电影一区在线观看| 欧美午夜美女看片| 9l国产精品久久久久麻豆| 欧美大片在线影院| 亚洲电影在线免费观看| 久久在线免费观看| 激情综合久久| 毛片一区二区| 亚洲国产成人久久| 欧美成人精品不卡视频在线观看 | 国产日韩欧美精品| 亚洲永久在线观看| 国产精品久久久久免费a∨大胸| 夜色激情一区二区| 欧美三级小说| 亚洲中字在线| 国产欧美日韩综合精品二区| 先锋影音国产一区| 国产日韩欧美一区| 久久乐国产精品| 亚洲电影视频在线| 欧美精品综合| 亚洲一区亚洲二区| 国产精品一区二区三区四区五区 | 国产精品一区二区a| 午夜精品短视频| 国产一区二区三区在线观看网站 | 久久久久久9| 亚洲成人影音| 欧美日韩视频在线第一区| 亚洲天堂偷拍| 激情六月综合| 欧美日韩成人在线观看| 亚洲一区二区三区涩| 国产深夜精品| 牛牛精品成人免费视频| 一本色道久久综合狠狠躁篇怎么玩 | 亚洲欧美日韩国产一区| 国产揄拍国内精品对白| 欧美电影在线播放| 午夜久久美女| 亚洲精品国久久99热| 国产精品久线观看视频| 久久人人爽国产| 亚洲手机视频| 亚洲国产精品va在线观看黑人| 欧美日韩精品免费观看视频| 久久av一区二区| 99在线精品视频在线观看| 国产私拍一区| 欧美日本在线| 久热这里只精品99re8久| 亚洲午夜性刺激影院| 亚洲国产电影| 国产亚洲一区二区三区在线观看| 欧美激情精品久久久久久黑人 | 久久精品人人做人人综合 | 欧美私人网站| 欧美不卡在线| 久久久久久久999精品视频| 中日韩午夜理伦电影免费| 亚洲第一精品在线| 国产一区在线播放| 国产精品视频免费观看www| 欧美精品 国产精品| 蜜桃视频一区| 久久久五月婷婷| 久久电影一区| 性久久久久久久久久久久| 一区二区欧美精品| 亚洲麻豆av| 亚洲精品久久久久中文字幕欢迎你 | 欧美国产日韩一区二区| 久久久久久自在自线| 午夜精品久久久久影视| 亚洲网站在线| 一道本一区二区| 亚洲色无码播放| 亚洲视频精选| 亚洲免费视频中文字幕| 亚洲性感激情| 亚洲欧美一区二区精品久久久| 中日韩高清电影网| 亚洲视频www| 一区二区日本视频| 在线性视频日韩欧美| 99re成人精品视频| 一区二区三区蜜桃网| 99视频热这里只有精品免费| 99re8这里有精品热视频免费 | 亚洲七七久久综合桃花剧情介绍| 国内精品久久久久久久97牛牛| 国产日韩欧美三级| 国产在线观看一区| 国产午夜一区二区三区| 国产视频在线观看一区二区三区| 国产精品日韩精品| 国产欧美日韩一区二区三区在线| 国产精品自拍在线| 国产午夜精品视频免费不卡69堂| 国产日韩在线看| 国产一区二区三区视频在线观看| 激情婷婷亚洲| 亚洲精品中文字幕女同| 亚洲一区二区黄色| 久久久九九九九| 你懂的视频一区二区| 欧美日韩一区二区在线观看视频| 欧美调教vk| 国产精品夜夜夜一区二区三区尤| 国产视频在线观看一区二区三区| 韩国在线一区| 亚洲久久视频| 亚洲欧美电影在线观看| 午夜一区在线| 久久免费视频网| 欧美日韩精品久久久| 国产欧美va欧美va香蕉在| 一区二区视频免费完整版观看|