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

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

視頻號
視頻號

抖音
抖音

快手
快手

微博
微博

歸并排序奇數個怎么排

文檔

歸并排序奇數個怎么排

歸并排序(Merge sort)是建立在歸并操作上的一種有效的排序算法。該算法是采用分治法(Divide and Conquer)的一個非常典型的應用。
推薦度:
導讀歸并排序(Merge sort)是建立在歸并操作上的一種有效的排序算法。該算法是采用分治法(Divide and Conquer)的一個非常典型的應用。
.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}

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

歸并排序(Merge sort)是建立在歸并操作上的一種有效的排序算法。該算法是采用分治法(Divide and Conquer)的一個非常典型的應用。

作為一種典型的分而治之思想的算法應用,歸并排序的實現由兩種方法:

自上而下的遞歸(所有遞歸的方法都可以用迭代重寫,所以就有了第 2 種方法);自下而上的迭代;

在《數據結構與算法 JavaScript 描述》中,作者給出了自下而上的迭代方法。但是對于遞歸法,作者卻認為:

However, it is not possible to do so in JavaScript, as the recursion goes too deep for the language to handle.

然而,在 JavaScript 中這種方式不太可行,因為這個算法的遞歸深度對它來講太深了。

說實話,我不太理解這句話。意思是 JavaScript 編譯器內存太小,遞歸太深容易造成內存溢出嗎?還望有大神能夠指教。

和選擇排序一樣,歸并排序的性能不受輸入數據的影響,但表現比選擇排序好的多,因為始終都是 O(nlogn) 的時間復雜度。代價是需要額外的內存空間。

2. 算法步驟

申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合并后的序列;

設定兩個指針,最初位置分別為兩個已經排序序列的起始位置;

比較兩個指針所指向的元素,選擇相對小的元素放入到合并空間,并移動指針到下一位置;

重復步驟 3 直到某一指針達到序列尾;

將另一序列剩下的所有元素直接復制到合并序列尾。

3. 動圖演示

代碼實現JavaScript實例 function mergeSort(arr) { ?// 采用自上而下的遞歸方法? ? var len = arr.length;? ? if(len < 2) {? ? ? ? return arr;? ? }? ? var middle = Math.floor(len / 2),? ? ? ? left = arr.slice(0, middle),? ? ? ? right = arr.slice(middle);? ? return merge(mergeSort(left), mergeSort(right));}function merge(left, right){? ? var result = [];? ? while (left.length && right.length) {? ? ? ? if (left[0] <= right[0]) {? ? ? ? ? ? result.push(left.shift());? ? ? ? } else {? ? ? ? ? ? result.push(right.shift());? ? ? ? }? ? }? ? while (left.length)? ? ? ? result.push(left.shift());? ? while (right.length)? ? ? ? result.push(right.shift());? ? return result;}Python實例 def mergeSort(arr):? ? import math? ? if(len(arr)<2):? ? ? ? return arr? ? middle = math.floor(len(arr)/2)? ? left, right = arr[0:middle], arr[middle:]? ? return merge(mergeSort(left), mergeSort(right))def merge(left,right):? ? result = []? ? while left and right:? ? ? ? if left[0] <= right[0]:? ? ? ? ? ? result.append(left.pop(0))? ? ? ? else:? ? ? ? ? ? result.append(right.pop(0));? ? while left:? ? ? ? result.append(left.pop(0))? ? while right:? ? ? ? result.append(right.pop(0));? ? return resultGo 實例 func mergeSort(arr []int) []int {? ? ? ? length := len(arr)? ? ? ? if length < 2 {? ? ? ? ? ? ? ? return arr? ? ? ? }? ? ? ? middle := length / 2? ? ? ? left := arr[0:middle]? ? ? ? right := arr[middle:]? ? ? ? return merge(mergeSort(left), mergeSort(right))}func merge(left []int, right []int) []int {? ? ? ? var result []int? ? ? ? for len(left) != 0 && len(right) != 0 {? ? ? ? ? ? ? ? if left[0] <= right[0] {? ? ? ? ? ? ? ? ? ? ? ? result = append(result, left[0])? ? ? ? ? ? ? ? ? ? ? ? left = left[1:]? ? ? ? ? ? ? ? } else {? ? ? ? ? ? ? ? ? ? ? ? result = append(result, right[0])? ? ? ? ? ? ? ? ? ? ? ? right = right[1:]? ? ? ? ? ? ? ? }? ? ? ? }? ? ? ? for len(left) != 0 {? ? ? ? ? ? ? ? result = append(result, left[0])? ? ? ? ? ? ? ? left = left[1:]? ? ? ? }? ? ? ? for len(right) != 0 {? ? ? ? ? ? ? ? result = append(result, right[0])? ? ? ? ? ? ? ? right = right[1:]? ? ? ? }? ? ? ? return result}Java實例 public class MergeSort implements IArraySort {? ? @Override? ? public int[] sort(int[] sourceArray) throws Exception {? ? ? ? // 對 arr 進行拷貝,不改變參數內容? ? ? ? int[] arr = Arrays.copyOf(sourceArray, sourceArray.length);? ? ? ? if (arr.length < 2) {? ? ? ? ? ? return arr;? ? ? ? }? ? ? ? int middle = (int) Math.floor(arr.length / 2);? ? ? ? int[] left = Arrays.copyOfRange(arr, 0, middle);? ? ? ? int[] right = Arrays.copyOfRange(arr, middle, arr.length);? ? ? ? return merge(sort(left), sort(right));? ? }? ? protected int[] merge(int[] left, int[] right) {? ? ? ? int[] result = new int[left.length + right.length];? ? ? ? int i = 0;? ? ? ? while (left.length > 0 && right.length > 0) {? ? ? ? ? ? if (left[0] <= right[0]) {? ? ? ? ? ? ? ? result[i++] = left[0];? ? ? ? ? ? ? ? left = Arrays.copyOfRange(left, 1, left.length);? ? ? ? ? ? } else {? ? ? ? ? ? ? ? result[i++] = right[0];? ? ? ? ? ? ? ? right = Arrays.copyOfRange(right, 1, right.length);? ? ? ? ? ? }? ? ? ? }? ? ? ? while (left.length > 0) {? ? ? ? ? ? result[i++] = left[0];? ? ? ? ? ? left = Arrays.copyOfRange(left, 1, left.length);? ? ? ? }? ? ? ? while (right.length > 0) {? ? ? ? ? ? result[i++] = right[0];? ? ? ? ? ? right = Arrays.copyOfRange(right, 1, right.length);? ? ? ? }? ? ? ? return result;? ? }}PHP實例 function mergeSort($arr){? ? $len = count($arr);? ? if ($len < 2) {? ? ? ? return $arr;? ? }? ? $middle = floor($len / 2);? ? $left = array_slice($arr, 0, $middle);? ? $right = array_slice($arr, $middle);? ? return merge(mergeSort($left), mergeSort($right));}function merge($left, $right){? ? $result = [];? ? while (count($left) > 0 && count($right) > 0) {? ? ? ? if ($left[0] <= $right[0]) {? ? ? ? ? ? $result[] = array_shift($left);? ? ? ? } else {? ? ? ? ? ? $result[] = array_shift($right);? ? ? ? }? ? }? ? while (count($left))? ? ? ? $result[] = array_shift($left);? ? while (count($right))? ? ? ? $result[] = array_shift($right);? ? return $result;}C實例 int min(int x, int y) {? ? return x < y ? x : y;}void merge_sort(int arr[], int len) {? ? int *a = arr;? ? int *b = (int *) malloc(len * sizeof(int));? ? int seg, start;? ? for (seg = 1; seg < len; seg += seg) {? ? ? ? for (start = 0; start < len; start += seg * 2) {? ? ? ? ? ? int low = start, mid = min(start + seg, len), high = min(start + seg * 2, len);? ? ? ? ? ? int k = low;? ? ? ? ? ? int start1 = low, end1 = mid;? ? ? ? ? ? int start2 = mid, end2 = high;? ? ? ? ? ? while (start1 < end1 && start2 < end2)? ? ? ? ? ? ? ? b[k++] = a[start1] < a[start2] ? a[start1++] : a[start2++];? ? ? ? ? ? while (start1 < end1)? ? ? ? ? ? ? ? b[k++] = a[start1++];? ? ? ? ? ? while (start2 < end2)? ? ? ? ? ? ? ? b[k++] = a[start2++];? ? ? ? }? ? ? ? int *temp = a;? ? ? ? a = b;? ? ? ? b = temp;? ? }? ? if (a != arr) {? ? ? ? int i;? ? ? ? for (i = 0; i < len; i++)? ? ? ? ? ? b[i] = a[i];? ? ? ? b = a;? ? }? ? free(b);}

遞歸版:

實例 void merge_sort_recursive(int arr[], int reg[], int start, int end) {? ? if (start >= end)? ? ? ? return;? ? int len = end - start, mid = (len >> 1) + start;? ? int start1 = start, end1 = mid;? ? int start2 = mid + 1, end2 = end;? ? merge_sort_recursive(arr, reg, start1, end1);? ? merge_sort_recursive(arr, reg, start2, end2);? ? int k = start;? ? while (start1 <= end1 && start2 <= end2)? ? ? ? reg[k++] = arr[start1] < arr[start2] ? arr[start1++] : arr[start2++];? ? while (start1 <= end1)? ? ? ? reg[k++] = arr[start1++];? ? while (start2 <= end2)? ? ? ? reg[k++] = arr[start2++];? ? for (k = start; k <= end; k++)? ? ? ? arr[k] = reg[k];}void merge_sort(int arr[], const int len) {? ? int reg[len];? ? merge_sort_recursive(arr, reg, 0, len - 1);}C++

迭代版:

實例 template // 整數或浮點數皆可使用,若要使用物件(class)時必須設定"小於"(<)的運算子功能void merge_sort(T arr[], int len) {? ? T *a = arr;? ? T *b = new T[len];? ? for (int seg = 1; seg < len; seg += seg) {? ? ? ? for (int start = 0; start < len; start += seg + seg) {? ? ? ? ? ? int low = start, mid = min(start + seg, len), high = min(start + seg + seg, len);? ? ? ? ? ? int k = low;? ? ? ? ? ? int start1 = low, end1 = mid;? ? ? ? ? ? int start2 = mid, end2 = high;? ? ? ? ? ? while (start1 < end1 && start2 < end2)? ? ? ? ? ? ? ? b[k++] = a[start1] < a[start2] ? a[start1++] : a[start2++];? ? ? ? ? ? while (start1 < end1)? ? ? ? ? ? ? ? b[k++] = a[start1++];? ? ? ? ? ? while (start2 < end2)? ? ? ? ? ? ? ? b[k++] = a[start2++];? ? ? ? }? ? ? ? T *temp = a;? ? ? ? a = b;? ? ? ? b = temp;? ? }? ? if (a != arr) {? ? ? ? for (int i = 0; i < len; i++)? ? ? ? ? ? b[i] = a[i];? ? ? ? b = a;? ? }? ? delete[] b;}

遞歸版:

實例 void Merge(vector &Array, int front, int mid, int end) {? ? // preconditions:? ? // Array[front...mid] is sorted? ? // Array[mid+1 ... end] is sorted? ? // Copy Array[front ... mid] to LeftSubArray? ? // Copy Array[mid+1 ... end] to RightSubArray? ? vector LeftSubArray(Array.begin() + front, Array.begin() + mid + 1);? ? vector RightSubArray(Array.begin() + mid + 1, Array.begin() + end + 1);? ? int idxLeft = 0, idxRight = 0;? ? LeftSubArray.insert(LeftSubArray.end(), numeric_limits::max());? ? RightSubArray.insert(RightSubArray.end(), numeric_limits::max());? ? // Pick min of LeftSubArray[idxLeft] and RightSubArray[idxRight], and put into Array[i]? ? for (int i = front; i <= end; i++) {? ? ? ? if (LeftSubArray[idxLeft] < RightSubArray[idxRight]) {? ? ? ? ? ? Array[i] = LeftSubArray[idxLeft];? ? ? ? ? ? idxLeft++;? ? ? ? } else {? ? ? ? ? ? Array[i] = RightSubArray[idxRight];? ? ? ? ? ? idxRight++;? ? ? ? }? ? }}void MergeSort(vector &Array, int front, int end) {? ? if (front >= end)? ? ? ? return;? ? int mid = (front + end) / 2;? ? MergeSort(Array, front, mid);? ? MergeSort(Array, mid + 1, end);? ? Merge(Array, front, mid, end);}C#實例 public static List sort(List lst) {? ? if (lst.Count <= 1)? ? ? ? return lst;? ? int mid = lst.Count / 2;? ? List left = new List(); ?// 定義左側List? ? List right = new List(); // 定義右側List? ? // 以下兩個循環把 lst 分為左右兩個 List? ? for (int i = 0; i < mid; i++)? ? ? ? left.Add(lst[i]);? ? for (int j = mid; j < lst.Count; j++)? ? ? ? right.Add(lst[j]);? ? left = sort(left);? ? right = sort(right);? ? return merge(left, right);}/// /// 合併兩個已經排好序的List/// /// 左側List/// 右側List/// static List merge(List left, List right) {? ? List temp = new List();? ? while (left.Count > 0 && right.Count > 0) {? ? ? ? if (left[0] <= right[0]) {? ? ? ? ? ? temp.Add(left[0]);? ? ? ? ? ? left.RemoveAt(0);? ? ? ? } else {? ? ? ? ? ? temp.Add(right[0]);? ? ? ? ? ? right.RemoveAt(0);? ? ? ? }? ? }? ? if (left.Count > 0) {? ? ? ? for (int i = 0; i < left.Count; i++)? ? ? ? ? ? temp.Add(left[i]);? ? }? ? if (right.Count > 0) {? ? ? ? for (int i = 0; i < right.Count; i++)? ? ? ? ? ? temp.Add(right[i]);? ? }? ? return temp;}Ruby實例 def merge list? return list if list.size < 2? pivot = list.size / 2? # Merge? lambda { |left, right|? ? final = []? ? until left.empty? or right.empty?? ? ? final << if left.first < right.first; left.shift else right.shift end? ? end? ? final + left + right? }.call merge(list[0...pivot]), merge(list[pivot..-1])end

參考地址:

https://github.com/hustcc/JS-Sorting-Algorithm/blob/master/5.mergeSort.md

https://zh.wikipedia.org/wiki/%E5%BD%92%E5%B9%B6%E6%8E%92%E5%BA%8F

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

熱心網友提供的補充1:

分而治之

可以看到這種結構很像一棵完全二叉樹,本文的歸并排序我們采用遞歸去實現(也可采用迭代的方式去實現)。分階段可以理解為就是遞歸拆分子序列的過程,遞歸深度為log2n。

合并相鄰有序子序列

再來看看治階段,我們需要將兩個已經有序的子序列合并成一個有序序列,比如上圖中的最后一次合并,要將[4,5,7,8]和[1,2,3,6]兩個已經有序的子序列,合并為最終序列[1,2,3,4,5,6,7,8],來看下實現步驟。

import java.util.Arrays;

/**
 * Created by chengxiao on 2016/12/8.
 */
public class MergeSort {
    public static void main(String []args){
        int []arr = {9,8,7,6,5,4,3,2,1};
        sort(arr);
        System.out.println(Arrays.toString(arr));
    }
    public static void sort(int []arr){
        int []temp = new int[arr.length];//在排序前,先建好一個長度等于原數組長度的臨時數組,避免遞歸中頻繁開辟空間
        sort(arr,0,arr.length-1,temp);
    }
    private static void sort(int[] arr,int left,int right,int []temp){
        if(left以上為歸并排序算法詳細介紹,插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序、基數排序等排序算法各有優缺點,用一張圖概括: 

關于時間復雜度

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

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

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

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

關于穩定性

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

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

名詞解釋:

n:數據規模

k:"桶"的個數

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

Out-place:占用額外內存

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

文檔

歸并排序奇數個怎么排

歸并排序(Merge sort)是建立在歸并操作上的一種有效的排序算法。該算法是采用分治法(Divide and Conquer)的一個非常典型的應用。
推薦度:
為你推薦
資訊專欄
熱門視頻
相關推薦
希爾排序法實例 簡單選擇排序算法 基數排序是一種基于 冒泡排序算法是幾層循環 桶排序思想 計數排序 堆排序算法實現 快速排序算法圖解 與動物有關的古詩 歸并排序是穩定排序嗎 希爾排序過程 選擇排序c語言 基數排序法 冒泡排序法例子 桶排序算法的代碼 計數排序算法實例 計數排序算法python c語言數據結構堆排序算法 實現快速排序算法 歸并排序算法過程圖解 有關動物的古詩 快速排序c++代碼 堆排序第一趟怎么求 c語言計數排序算法 桶排序基本算法 c語言冒泡排序法流程圖 基數排序算法數據結構 選擇排序代碼 希爾排序算法vb 歸并排序算法流程圖 描寫燕子的經典詩句 踏青詩詞佳句 含有動物的古詩 java快速排序簡單代碼 數據結構堆排序例題 計數排序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>
  • 欧美网站在线| 99在线精品视频| 欧美大尺度在线| 亚洲欧美国产日韩天堂区| **网站欧美大片在线观看| 国产精品久久久久秋霞鲁丝 | 国产一区999| 欧美视频在线免费看| 欧美1区2区| 久久夜色精品一区| 久久精品99国产精品日本| 亚洲亚洲精品在线观看| 亚洲精选在线| 亚洲日本理论电影| 亚洲韩国日本中文字幕| 在线视频成人| 一区二区亚洲精品| 韩国欧美一区| 伊人狠狠色j香婷婷综合| 国自产拍偷拍福利精品免费一| 国产精品久久久久久亚洲毛片| 欧美日韩一区二区三区在线看| 欧美精品三级日韩久久| 欧美大胆成人| 欧美日韩播放| 欧美系列一区| 国产精品人成在线观看免费 | 国产精品多人| 国产精品ⅴa在线观看h| 国产精品美女在线| 国产精品永久| 国产一级久久| 在线日韩一区二区| 亚洲欧洲中文日韩久久av乱码| 亚洲精品欧美一区二区三区| 亚洲精品日韩激情在线电影| 一区二区激情| 性久久久久久久久| 一区二区视频免费完整版观看| 欧美高清视频www夜色资源网| 久久这里只精品最新地址| 久久五月激情| 欧美精品二区| 国产精品一区三区| 一区二区在线视频播放| 亚洲日本欧美| 久久国产精品久久久久久久久久| 久久一日本道色综合久久| 欧美精品色网| 国产一区二区日韩| 亚洲精品久久久久久久久久久久久| 夜夜嗨av一区二区三区四区| 欧美在线精品一区| 欧美国产高清| 国产在线精品成人一区二区三区| 亚洲国产日韩一区二区| 亚洲亚洲精品在线观看| 玖玖国产精品视频| 国产精品yjizz| 亚洲第一视频| 性欧美长视频| 欧美日韩免费观看中文| 永久久久久久| 欧美中文在线字幕| 欧美三级电影一区| 影音先锋欧美精品| 先锋影音一区二区三区| 欧美精品日本| 在线看国产日韩| 性欧美1819sex性高清| 欧美日韩一区二区在线观看| 激情亚洲网站| 欧美伊人久久| 国产精品夜色7777狼人| 在线性视频日韩欧美| 女仆av观看一区| 黄色成人av网站| 午夜日本精品| 国产精品每日更新| 一区二区欧美视频| 欧美激情欧美狂野欧美精品| 在线成人亚洲| 噜噜爱69成人精品| 韩日成人在线| 久久人人超碰| 国内成人精品2018免费看| 午夜精品一区二区三区电影天堂| 国产精品成人v| 亚洲私拍自拍| 欧美性天天影院| 亚洲午夜精品在线| 国产精品久久亚洲7777| 99re在线精品| 国产精品99免视看9| 亚洲无限av看| 国产精品久久久久毛片软件 | 欧美日韩一视频区二区| 亚洲精品在线视频观看| 欧美精品一区二区在线播放| 亚洲精品少妇30p| 欧美日韩国产不卡| 99视频精品全部免费在线| 欧美日一区二区三区在线观看国产免| 99国产精品久久久| 欧美日韩在线免费观看| 宅男噜噜噜66国产日韩在线观看| 国产精品v一区二区三区 | 国产精品99久久不卡二区| 欧美日韩精品免费观看视频完整| 日韩视频在线免费观看| 国产精品成人一区二区三区吃奶 | 一区二区成人精品| 国产精品黄色| 久久精品日产第一区二区三区| 国模精品娜娜一二三区| 欧美a级大片| 在线视频亚洲一区| 国产视频观看一区| 嫩草影视亚洲| 亚洲天堂av在线免费观看| 国产女主播在线一区二区| 久久久久在线观看| 亚洲精品影院| 国产日韩欧美麻豆| 欧美福利视频在线观看| 亚洲欧美激情四射在线日| 在线看片第一页欧美| 欧美日韩国产首页在线观看| 午夜精品免费| 亚洲人成久久| 国产亚洲一区二区三区在线观看| 欧美福利视频| 久久精彩视频| 亚洲一二三区视频在线观看| 亚洲承认在线| 国产精品中文在线| 欧美精品久久久久久久久久| 欧美中文字幕视频在线观看| 夜夜嗨av色一区二区不卡| 狠久久av成人天堂| 国产精品啊啊啊| 欧美成人免费视频| 久久久久久9999| 亚洲欧美区自拍先锋| 一区二区av在线| 91久久久亚洲精品| 韩国三级在线一区| 国产精品一区二区a| 欧美性猛交视频| 欧美日韩成人综合| 欧美精品国产一区二区| 裸体一区二区| 久久久久国产一区二区三区| 午夜精品福利电影| 亚洲一级特黄| 亚洲深爱激情| 亚洲香蕉在线观看| 在线亚洲欧美视频| 日韩视频欧美视频| 亚洲韩国精品一区| 亚洲清纯自拍| 亚洲免费av电影| 日韩系列欧美系列| 日韩视频一区二区在线观看 | 9人人澡人人爽人人精品| 亚洲国产成人久久综合| 亚洲国产精品电影在线观看| 激情文学一区| 亚洲东热激情| 亚洲精品一区在线| 99精品欧美| 亚洲影院在线| 欧美在线观看网站| 久久久久国产精品厨房| 老色批av在线精品| 欧美xxx成人| 欧美日韩一区二区视频在线观看| 欧美网站在线观看| 国产精品视频网站| 国内精品一区二区| 亚洲国产成人午夜在线一区 | 日韩亚洲一区二区| 亚洲视频在线观看三级| 亚洲午夜国产成人av电影男同| 午夜日韩在线观看| 久久综合狠狠综合久久综青草| 欧美顶级大胆免费视频| 欧美日韩中文字幕在线视频| 国产精品一区亚洲| 精品二区视频| 一区二区国产日产| 欧美影院在线播放| 欧美激情第8页| 国产精品久久久久毛片软件 | 久热国产精品视频| 欧美理论电影网| 国产免费亚洲高清| 亚洲黄色在线| 亚洲欧美综合v| 欧美高潮视频|