精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

我們真的搞懂這些排序算法了嗎?

開發 前端 算法
或許你已經學過了這些常見的排序算法,或者你看過了別人寫的文章,但是這篇文章絕對不會浪費你的時間,一定會有所收獲的。

 [[379394]]

或許你已經學過了這些常見的排序算法,或者你看過了別人寫的文章,但是這篇文章絕對不會浪費你的時間,一定會有所收獲的。

寫在前面

這不快過年了嘛,袁廚想著給袁記菜館的各位同事發些年終獎,讓大家回家過個好年。讓菜館的店小二,二蛋也回家娶個媳婦。

袁記菜館內

袁廚:小二,最近快要過年了,咱們店也要給大家發點年終獎啦,你去根據咱們的紅黑豆小本本,看一下大家都該發多少的年終獎,然后根據金額從小到大排好,按順序一個個發錢,大家回去過個好年,你也老大不小了,回去娶個媳婦。

小二:好滴掌柜的,我現在馬上就去。

上面說到的按照金額從小到大排好就是我們今天要講的內容 --- 排序。

排序是我們生活中經常會面對的問題,體育課的時候,老師會讓我們從矮到高排列,考研錄取時,成績會按總分從高到底進行排序(考研的各位讀者,你們必能收到心儀學校給你們寄來的大信封),我們網購時,有時會按銷量從高到低,價格從低到高的順序將最符合咱們預期的商品列在前面,這些都是我們生活中的例子。

排序概念:將雜亂無章的數據元素,通過一定的方法(排序算法)按關鍵字順序排列的過程叫做排序。例如我們上面的銷量和價格就是關鍵字。

排序算法的穩定性

什么是排序算法的穩定性呢?

因為我們待排序的記錄序列中可能存在兩個或兩個以上的關鍵字相等的記錄,排序結果可能會存在不唯一的情況,所以我們排序之后,如果相等元素之間原有的先后順序不變。則稱所用的排序方法是穩定的,反之則稱之為不穩定的。見下圖

例如上圖,我們的數組中有兩個相同的元素 4, 我們分別用不同的排序算法對其排序,算法一排序之后,兩個相同元素的相對位置沒有發生改變,我們則稱之為穩定的排序算法,算法二排序之后相對位置發生改變,則為不穩定的排序算法。

那排序算法的穩定性又有什么用呢?

在我們刷題中大多只是將數組進行排序,只需考慮時間復雜度,空間復雜度等指標,排序算法是否穩定,一般不進行考慮。但是在真正軟件開發中排序算法的穩定性是一個特別重要的衡量指標。繼續說我們剛才的例子。我們想要實現年終獎從少到多的排序,然后相同年終獎區間內的紅豆數也按照從少到多進行排序。

排序算法的穩定性在這里就顯得至關重要。這是為什么呢?見下圖

第一次排序之后,所有的職工按照紅豆數從少到多有序。

第二次排序中,我們使用穩定的排序算法,所以經過第二次排序之后,年終獎相同的職工,仍然保持著紅豆的有序(相對位置不變),紅豆仍是從小到大排序。我們使用穩定的排序算法,只需要兩次排序即可。

穩定排序可以讓第一個關鍵字排序的結果服務于第二個關鍵字排序中數值相等的那些數。

上述情況如果我們利用不穩定的排序算法,實現這一效果是十分復雜的。

比較類和非比較類

我們根據元素是否依靠與其他元素的比較來決定元素間的相對次序。以此來區分比較類排序算法和非比較類排序算法。

內排序和外排序

內排序是在排序的整個過程中,待排序的所有記錄全部被放置在內存中。外排序是由于排序的記錄個數太多,不能同時放置在內存中,整個排序過程需要在內外存之間多次交換數據才能進行,常見的內部排序算法有:插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序、基數排序等。

對我們內排序來說,我們主要受三個方面影響,時間性能,輔助空間,算法的復雜性

時間性能

在我們的排序算法執行過程中,主要執行兩種操作比較和交換,比較是排序算法最起碼的操作,移動指記錄從一個位置移動到另一個位置。所以我們一個高效的排序算法,應該盡可能少的比較和移動。

輔助空間

執行算法所需要的輔助空間的多少,也是來衡量排序算法性能的一個重要指標

算法的復雜度

這里的算法復雜度不是指算法的時間復雜度,而是指算法本身的復雜度,過于復雜的算法也會影響排序的性能。

下面我們一起先來復習兩種簡單排序算法,冒泡排序和簡單選擇排序,看看有沒有之前忽略的東西。后面會持續連載,把常見的和實用的排序算法都進行總結。

冒泡排序(Bubble Sort)

我們在各個算法書上學習排序時,第一個估計都是冒泡排序。主要是這個排序算法思路最簡單,也最容易理解,(也可能是它的名字好聽,哈哈),學過的老哥們也一起來復習一下吧,我們一起深挖一下冒泡排序。

冒泡排序的基本思想是,兩兩比較相鄰記錄的關鍵字,如果是反序則交換,直到沒有反序為止。冒泡排序一次冒泡會讓至少一個元素移動到它應該在的位置,那么如果數組有 n 個元素,重復 n 次后則一定能完成排序。根據定義可知那么冒泡排序顯然是一種比較類排序。

最簡單的排序實現

我們先來看一下這段代碼

  1. class Solution { 
  2.     public int[] sortArray(int[] nums) { 
  3.         int len = nums.length; 
  4.         for (int i = 0; i < len; ++i) { 
  5.             for (int j = i+1; j < len; ++j) { 
  6.                 if (nums[i] > nums[j]) { 
  7.                     swap(nums,i,j); 
  8.                 } 
  9.             } 
  10.         } 
  11.         return nums; 
  12.           
  13.     } 
  14.     public void swap(int[] nums,int i,int j) { 
  15.         int temp = nums[i]; 
  16.         nums[i] = nums[j]; 
  17.         nums[j] = temp
  18.     } 

我們來思考一下上面的代碼,每次讓關鍵字 nums[i] 和 nums[j] 進行比較如果 nums[i] > nums[j] 時則進行交換,這樣 nums[0] 在經過一次循環后一定為最小值。

那么這段代碼是冒泡排序嗎?顯然不是,我們冒泡排序的思想是兩兩比較相鄰記錄的關鍵字,注意里面有相鄰記錄,所以這段代碼不是我們的冒泡排序,下面我們用動圖來模擬一下冒泡排序的執行過程,看完之后一定可以寫出正宗的冒泡排序。

冒泡排序代碼

  1. class Solution { 
  2.     public int[] sortArray(int[] nums) { 
  3.         int len = nums.length; 
  4.         for (int i = 0; i < len; ++i) { 
  5.             for (int j = 0; j < len - i - 1; ++j) { 
  6.                 if (nums[j] > nums[j+1]) { 
  7.                     swap(nums,j,j+1); 
  8.                 } 
  9.             } 
  10.         } 
  11.         return nums;        
  12.     } 
  13.     public void swap(int[] nums,int i,int j) { 
  14.         int temp = nums[i]; 
  15.         nums[i] = nums[j]; 
  16.         nums[j] = temp
  17.     } 

上圖中的代碼則為正宗的冒泡排序代碼,但是我們是不是發現了這個問題

我們此時數組已經完全有序了,可以直接返回,但是動圖中并沒有返回,而是繼續執行,那我們有什么辦法讓其完全有序時,直接返回,不繼續執行呢?

我們設想一下,我們是通過 nums[j] 和 nums[j+1] 進行比較,如果大于則進行交換,那我們設想一下,如果一個完全有序的數組,我們進行冒泡排序,每次比較發現都不用進行交換。那么如果沒有發生交換則說明當前完全有序。

那我們可不可以通過一個標志位來進行判斷是否發生了交換呢?當然是可以的

我們來對冒泡排序進行改進

改進的冒泡排序代碼

  1. class Solution { 
  2.     public int[] sortArray (int[] nums) { 
  3.         int len = nums.length; 
  4.         //標志位 
  5.         boolean flag = true
  6.         //注意看 for 循環條件 
  7.         for (int i = 0; i < len && flag; ++i) { 
  8.             //如果沒發生交換,則依舊為false,下次就會跳出循環 
  9.             flag = false
  10.             for (int j = 0; j < len - i - 1; ++j) { 
  11.                 if (nums[j] > nums[j+1]) { 
  12.                     swap(nums,j,j+1); 
  13.                     //發生交換,則變為true,下次繼續判斷 
  14.                     flag = true
  15.                 } 
  16.             }           
  17.         } 
  18.         return nums;          
  19.     } 
  20.     public void swap (int[] nums,int i,int j) { 
  21.         int temp = nums[i]; 
  22.         nums[i] = nums[j]; 
  23.         nums[j] = temp
  24.     } 

這樣我們就避免掉了已經有序的情況下無意義的循環判斷。

時間復雜度分析

最好情況,就是要排序的表完全有序的情況下,根據改進后的代碼,我們只需要一次遍歷即可,只需 n -1 次比較,時間復雜度為 O(n)。

最壞情況時,即待排序表逆序的情況,則需要比較(n-1) + (n-2) +.... + 2 + 1= n*(n-1)/2 ,并等量級的交換,則時間復雜度為O(n^2)。

平均情況下,需要 n*(n-1)/4 次交換操作,比較操作大于等于交換操作,而復雜度的上限是 O(n^2),所以平均情況下的時間復雜度就是 O(n^2)。

空間復雜度分析

因為冒泡排序只是相鄰元素之間的交換操作,只用到了常量級的額外空間,所以空間復雜度為 O(1)

穩定性分析

那么冒泡排序是穩定的嗎?當然是穩定的,我們代碼中,當 nums[j] > nums[j + 1] 時,才會進行交換,相等時不會交換,相等元素的相對位置沒有改變,所以冒泡排序是穩定的。

簡單選擇排序(Simple Selection Sort)

我們的冒泡排序不斷進行交換,通過交換完成最終的排序,我們的簡單選擇排序的思想也很容易理解,主要思路就是我們每一趟在 n-i+1 個記錄中選取關鍵字最小的記錄作為有序序列的第 i 個記錄,見下圖

例如上圖,綠色代表已經排序的元素,紅色代表未排序的元素。我們當前指針指向 4 ,則我們遍歷紅色元素,從中找到最小值,然后與 4 交換。我們發現選擇排序執行完一次循環也至少可以將 1 個元素歸位。

下面我們來看一下代碼的執行過程,看過之后肯定能寫出代碼的。

注:我們為了更容易理解,min 值保存的是值,而不是索引,實際代碼中保存的是索引

簡單選擇排序代碼

  1. class Solution { 
  2.     public int[] sortArray(int[] nums) { 
  3.  
  4.         int len = nums.length; 
  5.         int min = 0; 
  6.         for (int i = 0; i < len; ++i) { 
  7.             min = i; 
  8.             //遍歷找到最小值 
  9.             for (int j = i + 1; j < len; ++j) {               
  10.                 if (nums[min] > nums[j]) min = j;               
  11.             } 
  12.             if (min != i) swap(nums,i,min);         
  13.         } 
  14.         return nums; 
  15.     } 
  16.     public void swap (int[] nums, int i, int j) { 
  17.         int temp = nums[i]; 
  18.         nums[i] = nums[j]; 
  19.         nums[j] = temp
  20.     } 

時間復雜度分析

從簡單選擇排序的過程來看,他最大的特點就是交換移動元素次數相當少,這樣也就節省了排序時間,簡單選擇和冒泡排序不一樣,我們發現無論最好情況和最壞情況,元素間的比較次數是一樣的,第 i 次排序,需要 n - i 次比較,n 代表元素個數,則一共需要比較(n-1) + (n-2) +.... + 2 + 1= n*(n-1)/2 次。

對于交換而言,最好情況交換 0 次,最壞情況(逆序時)交換 n - 1次。那么簡單選擇排序時間復雜度也為 O(n^2) 但是其交換次數遠小于冒泡排序,所以其效率是好于冒泡排序的。

空間復雜度分析

由我們的動圖可知,我們的簡單選擇排序只用到了常量級的額外空間,所以空間復雜度為 O(1)。

穩定性分析

我們思考一下,我們的簡單選擇排序是穩定的嗎?

顯然不是穩定的,因為我們需要在指針后面找到最小的值,與指針指向的值交換,見下圖。

此時我們需要從后面元素中找到最小的元素與指針指向元素交換,也就是元素 2 。但是我們交換后發現,兩個相等元素 3 的相對位置發生了改變,所以簡單選擇排序是不穩定的排序算法。

本文轉載自微信公眾號「袁廚的算法小屋」,可以通過以下二維碼關注。轉載本文請聯系袁廚的算法小屋公眾號。

 

責任編輯:武曉燕 來源: 袁廚的算法小屋
相關推薦

2021-10-20 06:58:11

SQL數據庫程序員

2018-10-20 16:05:12

iOSAPP開發

2023-03-03 08:13:35

2021-02-26 05:29:11

排序算法數組

2021-02-22 07:29:07

算法初級排序

2021-08-18 15:23:42

SDNSD-WAN軟件定義網絡

2010-03-03 09:09:53

Android SDK

2019-01-07 16:35:58

微軟開源Java

2013-07-15 16:55:45

2020-01-15 10:17:41

Kubernetes容器負載均衡

2024-08-30 14:34:00

2012-01-12 12:53:25

2023-10-10 08:00:07

2021-03-05 18:38:45

ESvue項目

2010-06-21 10:09:47

Java

2017-08-24 08:18:00

2021-04-13 15:56:24

JavaPython技術

2023-05-24 10:04:48

2012-01-12 09:53:46

2019-09-09 16:10:32

ETL數據科學數據
點贊
收藏

51CTO技術棧公眾號

亚州一区二区三区| 黄色片一区二区三区| 国产91精品对白在线播放| 色八戒一区二区三区| 翔田千里亚洲一二三区| 国产女人18毛片水18精| 激情自拍一区| 亚洲国产精品美女| 免费看黄色一级大片| 老司机在线视频二区| 丁香婷婷深情五月亚洲| 国产成+人+综合+亚洲欧美丁香花| 人妻互换一区二区激情偷拍| 亚洲超碰在线观看| 亚洲国产成人精品视频| 加勒比在线一区二区三区观看| av图片在线观看| 91精品国产91久久久久久密臀| 亚洲国产中文字幕在线观看| 色综合色综合色综合色综合| yellow在线观看网址| 国产精品国产三级国产aⅴ原创| 97在线资源站| 国产精品老女人| 亚洲精品在线观看91| 亚洲精品www久久久久久广东| 日韩不卡一二三| 欧美aa一级| 一区二区成人在线| 欧日韩一区二区三区| 亚洲精品久久久久久无码色欲四季 | 大地资源第二页在线观看高清版| 天天综合网天天综合| 精品一区二区日韩| 日韩av男人的天堂| 国产精品99精品无码视| 仙踪林久久久久久久999| 亚洲情综合五月天| 亚洲天堂2024| 91麻豆精品一二三区在线| 在线亚洲免费视频| 国产在线观看福利| 成人av影院在线观看| 日韩一区欧美小说| 亚洲一卡二卡三卡| 第一页在线观看| 久久蜜桃香蕉精品一区二区三区| 国产精品一区二区欧美黑人喷潮水| 国产女人高潮的av毛片| 日韩成人精品在线观看| 欧美中文字幕视频| 久久久久久久久久久久久久av| 欧美激情精品久久久六区热门| 精品国产一区二区三区久久狼5月| 久久亚洲无码视频| 久久不见久久见免费视频7| 亚洲成色999久久网站| 香蕉久久久久久av成人| 视频精品一区二区三区| 欧美一卡2卡三卡4卡5免费| 91pony九色| 成人在线啊v| 欧美一区午夜视频在线观看| 成年人网站av| 日韩欧美中文字幕一区二区三区| 欧美一区二区三区四区五区| 五月天国产视频| 免费欧美网站| 精品粉嫩aⅴ一区二区三区四区| 精品人妻一区二区免费| 欧美1区二区| 亚洲欧美综合v| 国产精品天天干| 99精品视频在线观看播放| 久久影视免费观看| 日本青青草视频| 亚洲二区在线| 日本一区二区在线免费播放| 无码人妻一区二区三区免费| 免费成人小视频| 91精品网站| 天天干天天操av| 国产亚洲精品久| 一区二区不卡在线观看| a毛片在线观看| 精品国产老师黑色丝袜高跟鞋| 干日本少妇首页| 日韩一级特黄| 亚洲国产97在线精品一区| 精品人妻少妇嫩草av无码| 欧美一二区在线观看| 久久国产色av| 99热只有这里有精品| 青青草91视频| 99蜜桃在线观看免费视频网站| 午夜影院免费视频| 国产精品网曝门| 精品久久久久久无码中文野结衣| 美女日韩欧美| 日韩欧美中文一区二区| 素人fc2av清纯18岁| 99国产精品一区二区| 久久久伊人欧美| 欧美在线视频精品| 国产1区2区3区精品美女| 欧美日韩精品免费在线观看视频| 黄网站在线播放| 日韩欧亚中文在线| 国模大尺度视频| 国产一区二区三区电影在线观看 | 日本vs亚洲vs韩国一区三区二区| 5566中文字幕一区二区| 福利视频在线导航| 亚洲成av人片一区二区三区| 日本人视频jizz页码69| 欧美美女黄色| 欧美成人亚洲成人| 国产九色91回来了| 不卡大黄网站免费看| 正在播放91九色| 巨茎人妖videos另类| 欧美变态tickling挠脚心| 亚欧精品视频一区二区三区| 99这里有精品| 成人av免费电影| 日韩大片在线永久免费观看网站| 懂色av影视一区二区三区| 日韩欧美中文视频| 日韩国产欧美| 日本午夜人人精品| 午夜在线视频免费| 亚洲另类在线一区| 久久婷五月综合| 精品免费一区二区| 欧美怡春院一区二区三区| a网站在线观看| 国产精品久久久久一区| 亚洲一区二区三区四区五区xx| 九色丨蝌蚪丨成人| 欧美高清videos高潮hd| 一区二区三区黄| 国产日韩欧美综合在线| 久久久久久久久久久免费视频| 麻豆精品99| 91国产美女视频| 天天操天天爱天天干| 亚洲午夜免费电影| 91成人在线观看喷潮蘑菇| 欧美视频四区| 成人av资源| 色a资源在线| 欧美成人综合网站| 久久伊人成人网| 成人av资源在线| 日本一区午夜艳熟免费| 成人午夜大片| 91国内在线视频| 色婷婷av一区二区三区之e本道| 一区二区三区中文在线| 日本网站在线看| 欧美激情1区2区3区| 国产a一区二区| av在线理伦电影| 亚洲精品福利在线观看| 亚洲精品男人的天堂| 国产欧美精品区一区二区三区 | 国产成人av电影| 阿v天堂2018| 亚洲免费专区| 国产精品欧美在线| 黄色在线观看网站| 日韩女优电影在线观看| 日本在线视频中文字幕| 91视频xxxx| 超碰在线97免费| 一区二区日韩欧美| 国产嫩草一区二区三区在线观看| 国产在线88av| 在线视频欧美性高潮| 91超薄丝袜肉丝一区二区| 亚洲黄色av一区| 99久久人妻无码中文字幕系列| 日韩国产欧美三级| 日本黄网站色大片免费观看| 欧美尿孔扩张虐视频| 国产精品久久久久久久久免费看| av免费看在线| 亚洲精品日韩在线| 国产又粗又大又黄| 亚洲超碰精品一区二区| 女女互磨互喷水高潮les呻吟| 精品无人码麻豆乱码1区2区| 欧美激情视频免费看| 国产日产精品_国产精品毛片| 亚洲www在线观看| 亚洲电影观看| 久久综合久久美利坚合众国| 五月婷婷伊人网| 欧美久久婷婷综合色| 日韩无码精品一区二区三区| 中文字幕国产精品一区二区| 国产大尺度视频| 日本不卡一区二区三区高清视频| 日本国产中文字幕| 经典一区二区| 国产精品99久久久久久久| 日本少妇一区| 97色在线播放视频| 好吊日视频在线观看| 日韩精品电影网| 国产精品久久久久久无人区| 色婷婷激情综合| 国产精品99无码一区二区| 国产精品三级av| 熟女俱乐部一区二区视频在线| 国产精品自拍网站| 香蕉视频禁止18| 亚洲欧美日韩精品一区二区| 日韩视频一二三| 北条麻妃国产九九九精品小说| 精品国产乱码久久久久久88av| 国产精品成人3p一区二区三区| 国产国语videosex另类| 91福利在线免费| 久久高清视频免费| 亚洲图片88| 伊人久久男人天堂| 青青草观看免费视频在线 | 高清av在线| 精品视频—区二区三区免费| 亚洲AV无码精品国产| 欧美高清精品3d| 在线观看中文字幕码| 91久久香蕉国产日韩欧美9色| 日韩手机在线观看| 偷拍与自拍一区| 国产精品99精品| 亚洲一级二级三级在线免费观看| 小泽玛利亚一区二区免费| 国产精品拍天天在线| 久久婷婷五月综合| 久久久久久免费毛片精品| 亚洲av无码国产精品久久| 成人短视频下载| 性高潮免费视频| aaa亚洲精品| yy1111111| 99久久精品国产毛片| www.17c.com喷水少妇| 成人av免费在线播放| 性高潮免费视频| 97国产一区二区| 熟女俱乐部一区二区视频在线| 久久一二三国产| 日本一卡二卡在线播放| 国产精品国产三级国产aⅴ无密码| 香蕉久久久久久久| 亚洲图片激情小说| 激情五月婷婷小说| 亚洲国产一区二区三区青草影视| 国产一级一片免费播放放a| 亚洲第一综合色| 影音先锋在线国产| 欧美性一二三区| 国产美女精品视频国产| 欧美一区二区视频在线观看2022| 国产aⅴ爽av久久久久成人| 精品久久免费看| 日韩欧美在线观看一区二区| 亚洲欧洲美洲在线综合| 午夜在线视频播放| 欧美日韩国产成人在线观看| 蜜桃视频m3u8在线观看| 国产成人精品久久二区二区| 欧美日韩免费电影| www.久久草| 一呦二呦三呦国产精品| 亚洲精品国产精品国自产| 希岛爱理一区二区三区| av女优在线播放| 日韩主播视频在线| 三区视频在线观看| 成人美女视频在线观看18| 亚洲av综合一区二区| 国产精品国产三级国产| 久久久国产精品黄毛片| 一本久久a久久免费精品不卡| 怡红院男人天堂| 欧美不卡在线视频| 国产精品视频一区二区久久| 久久视频国产精品免费视频在线| 超碰高清在线| 国产在线观看91精品一区| 欧美国产极品| 欧美aaa在线观看| 性xx色xx综合久久久xx| 992kp免费看片| 久久一区二区三区四区| 免费在线观看黄色av| 欧洲精品一区二区三区在线观看| www.好吊色| 在线精品播放av| 国产美女高潮在线| 91精品久久久久久久久不口人| 欧美美女在线直播| 国产人妻人伦精品| 日本亚洲三级在线| 欧产日产国产精品98| 国产精品久久久99| 男人天堂2024| 亚洲成人在线网| 色图在线观看| 成人免费观看网址| 精品av一区二区| 国产美女无遮挡网站| 国产成人aaa| 尤物在线免费视频| 欧美在线free| 每日更新在线观看av| 欧美国产在线视频| 99精品在线免费观看| 亚洲不卡1区| 老司机午夜精品视频在线观看| 欧美图片自拍偷拍| 亚洲日本va在线观看| 在线免费观看高清视频| 国产午夜精品视频| sese综合| 欧美日韩一区综合| 国产精品久久久久久模特| 亚洲一级Av无码毛片久久精品| 亚洲欧美另类小说视频| 国产精品怡红院| 日韩最新免费不卡| 日韩久久一区| 亚洲一区二区三区乱码| 日韩高清不卡一区二区| 乐播av一区二区三区| 色香蕉成人二区免费| 日韩大胆人体| 日本精品在线视频| 亚洲品质自拍| 国产最新免费视频| 久久综合九色综合久久久精品综合| 日本一区二区不卡在线| 日韩av在线直播| 自拍偷拍欧美视频| 欧美一区二区三区电影在线观看| 久久成人免费| 播金莲一级淫片aaaaaaa| 日韩欧美精品网站| 毛片在线播放网站| 国产成人久久久| 日本女优一区| 中文字幕线观看| 亚洲日本在线a| 性一交一乱一精一晶| 午夜精品美女自拍福到在线| 欧美激情极品| 亚洲男人天堂色| 综合av第一页| 亚洲国产视频一区二区三区| 韩国福利视频一区| 免费精品国产| 久久久久国产一区| 亚洲欧美区自拍先锋| 免费看国产片在线观看| 2019中文字幕全在线观看| 国产一区二区三区网| 午夜精品中文字幕| 一区二区三区在线视频免费| 免费观看的毛片| 日韩av不卡电影| 91精品久久久久久久久久不卡| 精品人妻人人做人人爽夜夜爽| 黄网站色欧美视频| 成人免费视频| 99热最新在线| 久久久青草婷婷精品综合日韩| 久草福利资源在线| 精品99一区二区| 韩国成人在线| av 日韩 人妻 黑人 综合 无码| 91丨九色丨蝌蚪丨老版| 亚洲视频久久久| 久久久久日韩精品久久久男男 | 先锋影音男人资源| 波多野结衣中文字幕一区| 嫩草影院一区二区三区| 欧美大片在线影院| 国内精品久久久久久久久电影网| 国产无色aaa| 黑人狂躁日本妞一区二区三区 | 精品电影在线观看| 1pondo在线播放免费| 官网99热精品| 老司机午夜精品| 欧美啪啪小视频| 久久99久久99精品中文字幕| 国产成人一区|