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

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

視頻號
視頻號

抖音
抖音

快手
快手

微博
微博

基數排序過程

文檔

基數排序過程

基數排序是一種非比較型整數排序算法,其原理是將整數按位數切割成不同的數字,然后按每個位數分別比較。由于整數也可以表達字符串(比如名字或日期)和特定格式的浮點數,所以基數排序也不是只能使用于整數。
推薦度:
導讀基數排序是一種非比較型整數排序算法,其原理是將整數按位數切割成不同的數字,然后按每個位數分別比較。由于整數也可以表達字符串(比如名字或日期)和特定格式的浮點數,所以基數排序也不是只能使用于整數。
.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}

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

基數排序是一種非比較型整數排序算法,其原理是將整數按位數切割成不同的數字,然后按每個位數分別比較。由于整數也可以表達字符串(比如名字或日期)和特定格式的浮點數,所以基數排序也不是只能使用于整數。

1. 基數排序 vs 計數排序 vs 桶排序

基數排序有兩種方法:

這三種排序算法都利用了桶的概念,但對桶的使用方法上有明顯差異:

基數排序:根據鍵值的每位數字來分配桶;計數排序:每個桶只存儲單一鍵值;桶排序:每個桶存儲一定范圍的數值;2. LSD 基數排序動圖演示

代碼實現JavaScript實例 //LSD Radix Sortvar counter = [];function radixSort(arr, maxDigit) {? ? var mod = 10;? ? var dev = 1;? ? for (var i = 0; i < maxDigit; i++, dev *= 10, mod *= 10) {? ? ? ? for(var j = 0; j < arr.length; j++) {? ? ? ? ? ? var bucket = parseInt((arr[j] % mod) / dev);? ? ? ? ? ? if(counter[bucket]==null) {? ? ? ? ? ? ? ? counter[bucket] = [];? ? ? ? ? ? }? ? ? ? ? ? counter[bucket].push(arr[j]);? ? ? ? }? ? ? ? var pos = 0;? ? ? ? for(var j = 0; j < counter.length; j++) {? ? ? ? ? ? var value = null;? ? ? ? ? ? if(counter[j]!=null) {? ? ? ? ? ? ? ? while ((value = counter[j].shift()) != null) {? ? ? ? ? ? ? ? ? ? ? arr[pos++] = value;? ? ? ? ? ? ? ? }? ? ? ? ? }? ? ? ? }? ? }? ? return arr;}Java實例 /**?* 基數排序?* 考慮負數的情況還可以參考: https://code.i-harness.com/zh-CN/q/e98fa9?*/public class RadixSort implements IArraySort {? ? @Override? ? public int[] sort(int[] sourceArray) throws Exception {? ? ? ? // 對 arr 進行拷貝,不改變參數內容? ? ? ? int[] arr = Arrays.copyOf(sourceArray, sourceArray.length);? ? ? ? int maxDigit = getMaxDigit(arr);? ? ? ? return radixSort(arr, maxDigit);? ? }? ? /**? ? ?* 獲取最高位數? ? ?*/? ? private int getMaxDigit(int[] arr) {? ? ? ? int maxValue = getMaxValue(arr);? ? ? ? return getNumLenght(maxValue);? ? }? ? private int getMaxValue(int[] arr) {? ? ? ? int maxValue = arr[0];? ? ? ? for (int value : arr) {? ? ? ? ? ? if (maxValue < value) {? ? ? ? ? ? ? ? maxValue = value;? ? ? ? ? ? }? ? ? ? }? ? ? ? return maxValue;? ? }? ? protected int getNumLenght(long num) {? ? ? ? if (num == 0) {? ? ? ? ? ? return 1;? ? ? ? }? ? ? ? int lenght = 0;? ? ? ? for (long temp = num; temp != 0; temp /= 10) {? ? ? ? ? ? lenght++;? ? ? ? }? ? ? ? return lenght;? ? }? ? private int[] radixSort(int[] arr, int maxDigit) {? ? ? ? int mod = 10;? ? ? ? int dev = 1;? ? ? ? for (int i = 0; i < maxDigit; i++, dev *= 10, mod *= 10) {? ? ? ? ? ? // 考慮負數的情況,這里擴展一倍隊列數,其中 [0-9]對應負數,[10-19]對應正數 (bucket + 10)? ? ? ? ? ? int[][] counter = new int[mod * 2][0];? ? ? ? ? ? for (int j = 0; j < arr.length; j++) {? ? ? ? ? ? ? ? int bucket = ((arr[j] % mod) / dev) + mod;? ? ? ? ? ? ? ? counter[bucket] = arrayAppend(counter[bucket], arr[j]);? ? ? ? ? ? }? ? ? ? ? ? int pos = 0;? ? ? ? ? ? for (int[] bucket : counter) {? ? ? ? ? ? ? ? for (int value : bucket) {? ? ? ? ? ? ? ? ? ? arr[pos++] = value;? ? ? ? ? ? ? ? }? ? ? ? ? ? }? ? ? ? }? ? ? ? return arr;? ? }? ? /**? ? ?* 自動擴容,并保存數據? ? ?*? ? ?* @param arr? ? ?* @param value? ? ?*/? ? private int[] arrayAppend(int[] arr, int value) {? ? ? ? arr = Arrays.copyOf(arr, arr.length + 1);? ? ? ? arr[arr.length - 1] = value;? ? ? ? return arr;? ? }}PHP實例 function radixSort($arr, $maxDigit = null){? ? if ($maxDigit === null) {? ? ? ? $maxDigit = max($arr);? ? }? ? $counter = [];? ? for ($i = 0; $i < $maxDigit; $i++) {? ? ? ? for ($j = 0; $j < count($arr); $j++) {? ? ? ? ? ? preg_match_all('/d/', (string) $arr[$j], $matches);? ? ? ? ? ? $numArr = $matches[0];? ? ? ? ? ? $lenTmp = count($numArr);? ? ? ? ? ? $bucket = array_key_exists($lenTmp - $i - 1, $numArr)? ? ? ? ? ? ? ? ? intval($numArr[$lenTmp - $i - 1])? ? ? ? ? ? ? ? : 0;? ? ? ? ? ? if (!array_key_exists($bucket, $counter)) {? ? ? ? ? ? ? ? $counter[$bucket] = [];? ? ? ? ? ? }? ? ? ? ? ? $counter[$bucket][] = $arr[$j];? ? ? ? }? ? ? ? $pos = 0;? ? ? ? for ($j = 0; $j < count($counter); $j++) {? ? ? ? ? ? $value = null;? ? ? ? ? ? if ($counter[$j] !== null) {? ? ? ? ? ? ? ? while (($value = array_shift($counter[$j])) !== null) {? ? ? ? ? ? ? ? ? ? $arr[$pos++] = $value;? ? ? ? ? ? ? ? }? ? ? ? ? }? ? ? ? }? ? }? ? return $arr;}C++實例 int maxbit(int data[], int n) //輔助函數,求數據的最大位數{? ? int maxData = data[0];? ? ? ? ? ? ? ///< 最大數? ? /// 先求出最大數,再求其位數,這樣有原先依次每個數判斷其位數,稍微優化點。? ? for (int i = 1; i < n; ++i)? ? {? ? ? ? if (maxData < data[i])? ? ? ? ? ? maxData = data[i];? ? }? ? int d = 1;? ? int p = 10;? ? while (maxData >= p)? ? {? ? ? ? //p *= 10; // Maybe overflow? ? ? ? maxData /= 10;? ? ? ? ++d;? ? }? ? return d;/* ? ?int d = 1; //保存最大的位數? ? int p = 10;? ? for(int i = 0; i < n; ++i)? ? {? ? ? ? while(data[i] >= p)? ? ? ? {? ? ? ? ? ? p *= 10;? ? ? ? ? ? ++d;? ? ? ? }? ? }? ? return d;*/}void radixsort(int data[], int n) //基數排序{? ? int d = maxbit(data, n);? ? int *tmp = new int[n];? ? int *count = new int[10]; //計數器? ? int i, j, k;? ? int radix = 1;? ? for(i = 1; i <= d; i++) //進行d次排序? ? {? ? ? ? for(j = 0; j < 10; j++)? ? ? ? ? ? count[j] = 0; //每次分配前清空計數器? ? ? ? for(j = 0; j < n; j++)? ? ? ? {? ? ? ? ? ? k = (data[j] / radix) % 10; //統計每個桶中的記錄數? ? ? ? ? ? count[k]++;? ? ? ? }? ? ? ? for(j = 1; j < 10; j++)? ? ? ? ? ? count[j] = count[j - 1] + count[j]; //將tmp中的位置依次分配給每個桶? ? ? ? for(j = n - 1; j >= 0; j--) //將所有桶中記錄依次收集到tmp中? ? ? ? {? ? ? ? ? ? k = (data[j] / radix) % 10;? ? ? ? ? ? tmp[count[k] - 1] = data[j];? ? ? ? ? ? count[k]--;? ? ? ? }? ? ? ? for(j = 0; j < n; j++) //將臨時數組的內容復制到data中? ? ? ? ? ? data[j] = tmp[j];? ? ? ? radix = radix * 10;? ? }? ? delete []tmp;? ? delete []count;}C實例 #include#define MAX 20//#define SHOWPASS#define BASE 10void print(int *a, int n) {? int i;? for (i = 0; i < n; i++) {? ? printf("%d ", a[i]);? }}void radixsort(int *a, int n) {? int i, b[MAX], m = a[0], exp = 1;? for (i = 1; i < n; i++) {? ? if (a[i] > m) {? ? ? m = a[i];? ? }? }? while (m / exp > 0) {? ? int bucket[BASE] = { 0 };? ? for (i = 0; i < n; i++) {? ? ? bucket[(a[i] / exp) % BASE]++;? ? }? ? for (i = 1; i < BASE; i++) {? ? ? bucket[i] += bucket[i - 1];? ? }? ? for (i = n - 1; i >= 0; i--) {? ? ? b[--bucket[(a[i] / exp) % BASE]] = a[i];? ? }? ? for (i = 0; i < n; i++) {? ? ? a[i] = b[i];? ? }? ? exp *= BASE;#ifdef SHOWPASS? ? printf(" PASS ? : ");? ? print(a, n);#endif? }}int main() {? int arr[MAX];? int i, n;? printf("Enter total elements (n <= %d) : ", MAX);? scanf("%d", &n);? n = n < MAX ? n : MAX;? printf("Enter %d Elements : ", n);? for (i = 0; i < n; i++) {? ? scanf("%d", &arr[i]);? }? printf(" ARRAY ?: ");? print(&arr[0], n);? radixsort(&arr[0], n);? printf(" SORTED : ");? print(&arr[0], n);? printf(" ");? return 0;}Lua實例 -- 獲取表中位數local maxBit = function (tt)? ? local weight = 10; ? ? ?-- 十進制? ? local bit = 1;? ? ? ? for k, v in pairs(tt) do? ? ? ? while v >= weight do? ? ? ? ? ? weight = weight * 10;? ? ? ? ? ? bit = bit + 1; ?? ? ? ? end? ? end? ? return bit;end-- 基數排序local radixSort = function (tt)? ? local maxbit = maxBit(tt); ? ? local bucket = {};? ? local temp = {};? ? local radix = 1;? ? for i = 1, maxbit do? ? ? ? for j = 1, 10 do? ? ? ? ? ? bucket[j] = 0; ? ? ?--- 清空桶? ? ? ? end? ? ? ? for k, v in pairs(tt) do? ? ? ? ? ? local remainder = math.floor((v / radix)) % 10 + 1; ? ?? ? ? ? ? ? bucket[remainder] = bucket[remainder] + 1; ? ? ?-- 每個桶數量自動增加1? ? ? ? end? ? ? ? ? ? ? ? for j = 2, 10 do? ? ? ? ? ? bucket[j] = bucket[j - 1] + bucket[j]; ?-- 每個桶的數量 = 以前桶數量和 + 自個數量? ? ? ? end ? ? ? ? -- 按照桶的位置,排序--這個是桶式排序,必須使用倒序,因為排序方法是從小到大,順序下來,會出現大的在小的上面清空。? ? ? ? for k = #tt, 1, -1 do? ? ? ? ? ? local remainder = math.floor((tt[k] / radix)) % 10 + 1;? ? ? ? ? ? temp[bucket[remainder]] = tt[k];? ? ? ? ? ? bucket[remainder] = bucket[remainder] - 1;? ? ? ? end? ? ? ? for k, v in pairs(temp) do? ? ? ? ? ? tt[k] = v;? ? ? ? end? ? ? ? radix = radix * 10;? ? endend;

參考地址:

https://github.com/hustcc/JS-Sorting-Algorithm/blob/master/10.radixSort.md

https://zh.wikipedia.org/wiki/%E5%9F%BA%E6%95%B0%E6%8E%92%E5%BA%8F

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

熱心網友提供的補充1:

java 代碼里,mod 每次循環會乘 10,但 counter 的行數是不需要變的,能包含 [-9,9] 就可以了。

for (int i = 0; i < maxDigit; i++, dev *= 10, mod *= 10) {
        // 考慮負數的情況,這里擴展一倍隊列數,其中 [0-9]對應負數,[10-19]對應正數 (bucket + 10)
    int[][] counter = new int[20][0];

    for (int j = 0; j < arr.length; j++) {
        int bucket = ((arr[j] % mod) / dev) + 10;
        counter[bucket] = arrayAppend(counter[bucket], arr[j]);
    }

    int pos = 0;
    for (int[] bucket : counter) {
        for (int value : bucket) {
            arr[pos++] = value;
        }
    }
}

熱心網友提供的補充2:

艾孜爾江補充使用C#基數排序算法如下:

///基數排序
static void RadixSort(List list)
{
    int maxValue = list.Max();//列表內部方法拿過來用用(在Linq中)
    int it = 0;//需要幾趟
                //maxvalue 9-1 99-2 999-3
                //10^0<=9 10^1>9 it=1
                //10^0<99 10^1<99 10^2>99 it=2
    while (Math.Pow(10, it) <= maxValue)
    {
        List> buckets = new List>(10);//分10個桶對應0-9
        for (int i = 0; i < 10; i++)
        {
            buckets.Add(new List());
        }//列表初始化大小
        for (int i = 0; i < list.Count; i++)//入桶
        {
            //989 it=0 989/10^it=989 989%10=9;
            int digit = (int)((list[i]) / (Math.Pow(10, it)) % 10);//得到對應桶
            buckets[digit].Add(list[i]);
        }//全部入桶
        list.Clear();//依次取出來
        for (int i = 0; i < buckets.Count; i++)
        {
            list.AddRange(buckets[i]);
        }
        it += 1;//繼續下一次循環入桶出桶
    }
}

熱心網友提供的補充3:

補充一下python的基數排序代碼實現:

def radix_sort(data):

    if not data:
        return []
    max_num = max(data)  # 獲取當前數列中最大值
    max_digit = len(str(abs(max_num)))  # 獲取最大的位數

    dev = 1  # 第幾位數,個位數為1,十位數為10···
    mod = 10  # 求余數的除法
    for i in range(max_digit):
        radix_queue = [list() for k in range(mod * 2)]  # 考慮到負數,我們用兩倍隊列
        for j in range(len(data)):
            radix = int(((data[j] % mod) / dev) + mod)
            radix_queue[radix].append(data[j])

        pos = 0
        for queue in radix_queue:
            for val in queue:
                data[pos] = val
                pos += 1

        dev *= 10
        mod *= 10
    return data

熱心網友提供的補充4:

go 的補一個吧:

// 基數排序
func RadixSort(arr []int) {
    // 計算最長的數字
    var (
        maxVal int
        maxLen int
    )
    for _, v := range arr {
        if maxVal < v {
            maxVal = v
        }
    }
    for maxVal > 0 {
        maxLen++
        maxVal /= 10
    }

    // 循環進行數據分配與回歸
    var (
        base    = 1           // 取余基數,初始是1,用于取出每個元素的倒數第 i+1 位的值,計算公式:v / base %10
        buckets = [10][]int{} // 基數桶,10個
    )
    for i := 0; i < maxLen; i++ { // 遍歷位
        for _, v := range arr { // 遍歷數組
            d := v / base % 10                 // 每個數字當前位值
            buckets[d] = append(buckets[d], v) // 存入對應桶中
        }

        // 將桶中元素還原到arr
        idx := 0
        for x, bucket := range buckets {
            if len(bucket) == 0 {
                continue
            }

            for _, v := range bucket {
                arr[idx] = v
                idx++
            }

            // 桶清空
            buckets[x] = []int{}
        }

        base *= 10 // 基數*10
    }
}

熱心網友提供的補充5:

補上python的實現代碼:

def radixSort(nums):
    """
    基數排序,數組元素必須是正整數
    >>>nums = [334, 5, 67, 345, 7, 99, 4, 23, 78, 45, 1, 3453, 23424]
    >>>radixSort(nums)
    >>>[1, 4, 5, 7, 23, 45, 67, 78, 99, 334, 345, 3453, 23424]
    """
    #遍歷數組獲取數組最大值和最大值對應的位數
    maxValue = nums[0]
    for n in nums:
        maxValue = max(n, maxValue)
    #迭代次數
    iterCount = len(str(maxValue))
    for i in range(iterCount):
        #定義桶,大小為10,對應0-9
        bucket = [[] for _ in range(10)]
        for n in nums:
            index = (n//10**i)%10
            bucket[index].append(n)
        #nums數組清零,并合并桶內元素至nums
        nums.clear()
        for b in bucket:
            nums.extend(b)
        print(nums)
    return nums
nums = [334, 5, 67, 345, 7, 99, 4, 23, 78, 45, 1, 3453, 23424]
radixSort(nums)

熱心網友提供的補充6:

上面 Java 版本有點問題:

for (int i = 0; i < maxDigit; i++, dev *= 10, mod *= 10) {
    // 考慮負數的情況,這里擴展一倍隊列數,其中 [0-9]對應負數,[10-19]對應正數 (bucket + 10)
    int[][] counter = new int[mod * 2][0];
....
}

counter 數組的定義,會隨著 mod 不斷乘 10 變得越來越大。理論上 counter 數組只需要容量為 20 就可以表示負數與正數的所有數字字符。

另外,方法 getMaxDigit 計算數字的最大長度,只考慮到最大值的長度,沒有考慮當存在負數時,最小值負數的字符長度也可能是最大的長度。

更新后的版本:

/** 基數排序  */
public class RadixSort  {

  public int[] sort(int[] arr) {

    int maxDigit = getMaxDigit(arr);
    return radixSort(arr, maxDigit);
  }

  /**   * 獲取最高位數   */  private int getMaxDigit(int[] arr) {
    int maxValue = getMaxValue(arr);
    int minValue = getMinValue(arr);
    return Math.max(getNumLength(maxValue), getNumLength(minValue));
  }

  private int getMaxValue(int[] arr) {
    int maxValue = arr[0];
    for (int value : arr) {
      if (maxValue < value) {
        maxValue = value;
      }
    }
    return maxValue;
  }

  private int getMinValue(int[] arr) {
    int minValue = arr[0];
    for (int value : arr) {
      if (minValue > value) {
        minValue = value;
      }
    }
    return minValue;
  }

  protected int getNumLength(long num) {
    if (num == 0) {
      return 1;
    }
    int lenght = 0;
    for (long temp = num; temp != 0; temp /= 10) {
      lenght++;
    }
    return lenght;
  }

  private int[] radixSort(int[] arr, int maxDigit) {
    int mod = 10;
    int dev = 1;

    for (int i = 0; i < maxDigit; i++, dev *= 10, mod *= 10) {
      // 考慮負數的情況,這里擴展一倍隊列數,其中 [0-9]對應負數,[10-19]對應正數 (bucket + 10)      int[][] counter = new int[20][0];

      for (int j = 0; j < arr.length; j++) {
        int bucket = ((arr[j] % mod) / dev) + 10;
        counter[bucket] = arrayAppend(counter[bucket], arr[j]);
      }

      int pos = 0;
      for (int[] bucket : counter) {
        for (int value : bucket) {
          arr[pos++] = value;
        }
      }
    }

    return arr;
  }

  /**   * 自動擴容,并保存數據   *   * @param arr   * @param value   */  private int[] arrayAppend(int[] arr, int value) {
    arr = Arrays.copyOf(arr, arr.length + 1);
    arr[arr.length - 1] = value;
    return arr;
  }
}
以上為基數排序算法詳細介紹,插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序、基數排序等排序算法各有優缺點,用一張圖概括:

關于時間復雜度

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

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

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

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

關于穩定性

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

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

名詞解釋:

n:數據規模

k:"桶"的個數

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

Out-place:占用額外內存

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

文檔

基數排序過程

基數排序是一種非比較型整數排序算法,其原理是將整數按位數切割成不同的數字,然后按每個位數分別比較。由于整數也可以表達字符串(比如名字或日期)和特定格式的浮點數,所以基數排序也不是只能使用于整數。
推薦度:
為你推薦
資訊專欄
熱門視頻
相關推薦
冒泡排序算法流程圖 c語言桶排序 堆是什么排序 快速排序法怎么排 歸并排序算法c++實現 希爾排序算法代碼 選擇排序算法的時間復雜度 基數排序的兩個基本過程是 冒泡排序算法思想 c桶排序 堆排序算法例子 編寫快速排序算法 歸并排序算法時間復雜度 希爾排序圖解流程圖 描述選擇排序算法 基數排序算法的基本思想 冒泡排序法流程圖 桶排序算法c 堆排序算法思想 快速排序思想 選擇排序算法的思路 希爾排序的基本原理 歸并排序的過程舉例 快速排序算法例題 堆排序算法操作 計數排序python實現 桶排序原理 冒泡排序例子 基數排序的基數什么意思 選擇排序過程 希爾排序c語言實現 歸并排序算法的分治方法 快速排序算法c 堆排序法 計數排序基本原理 桶排序算法原理 冒泡排序怎么優化 基數排序是什么 選擇排序算法代碼 希爾排序過程圖解
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>
  • 亚洲一区二区免费视频| 欧美肉体xxxx裸体137大胆| 亚洲欧洲精品一区二区精品久久久 | 亚洲天堂久久| 国产亚洲人成网站在线观看| 欧美日韩1区| 欧美成人在线网站| 玖玖玖国产精品| 久久久999精品| 午夜精品久久久久久久99黑人| 日韩视频一区二区三区| 黄色在线成人| 精品99一区二区| 一区精品在线播放| 国产真实精品久久二三区| 欧美私人网站| 国产精品久久久一本精品| 欧美日韩亚洲在线| 国产精品分类| 国产精品视频免费观看| 国产精品日韩欧美大师| 国产精品毛片大码女人| 国产精品久久久久aaaa樱花| 欧美午夜剧场| 国产精品久久久久毛片大屁完整版| 欧美日韩精品二区| 欧美日韩日日骚| 国产精品国产三级国产普通话蜜臀| 欧美午夜不卡在线观看免费| 欧美精品久久一区二区| 欧美激情在线狂野欧美精品| 欧美极品影院| 欧美视频一区二区在线观看| 国产精品男女猛烈高潮激情| 国产欧美日韩不卡| 在线观看91精品国产麻豆| 亚洲二区在线视频| 9色porny自拍视频一区二区| 亚洲一区二区三区四区五区午夜| 亚洲一区二区在线视频| 欧美在线视频观看| 米奇777超碰欧美日韩亚洲| 欧美激情在线| 国产精品夜夜夜| 尤物视频一区二区| 亚洲国产一区二区在线| 99热免费精品在线观看| 亚洲欧美成人| 免费日韩视频| 国产精品毛片va一区二区三区 | 欧美久久精品午夜青青大伊人| 欧美日韩麻豆| 韩国免费一区| 夜夜嗨av色综合久久久综合网| 亚洲欧美日韩另类| 另类欧美日韩国产在线| 欧美系列电影免费观看| 亚洲国产精品久久久久秋霞不卡 | 久久五月天婷婷| 欧美日韩精品一区| 国产一区二区欧美| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 亚洲激情欧美| 欧美与欧洲交xxxx免费观看| 欧美高清在线播放| 国产精品久久久久久久免费软件 | 亚洲国产高潮在线观看| 亚洲欧美日韩综合国产aⅴ| 欧美成人嫩草网站| 国产欧美日韩亚洲| 99亚洲精品| 蜜臀久久99精品久久久久久9| 国产精品久久福利| 亚洲人成网站精品片在线观看 | 国产色产综合产在线视频| 亚洲久久成人| 免费黄网站欧美| 国产一二三精品| 亚洲欧美日韩在线观看a三区| 欧美人成在线视频| 亚洲国产成人精品视频| 久久资源av| 国内精品久久久久久久影视蜜臀 | 国产精品v欧美精品v日韩 | 欧美日韩在线三区| 亚洲免费观看| 欧美日韩国产一级片| 亚洲激情成人网| 农村妇女精品| 亚洲国产专区校园欧美| 老司机免费视频久久| 伊人久久久大香线蕉综合直播| 欧美亚洲日本国产| 国产精品一区一区三区| 先锋a资源在线看亚洲| 国产精品视频yy9099| 亚洲欧美日韩一区在线| 国产精品免费aⅴ片在线观看| 亚洲一区二区三区精品动漫| 欧美日韩在线观看一区二区| 一区二区三区四区蜜桃| 国产精品乱人伦中文| 午夜精品成人在线视频| 国产欧美日韩精品一区| 欧美一区二区三区在线| 韩国三级在线一区| 美女精品国产| 亚洲视屏在线播放| 国产日韩欧美亚洲一区| 久久一区二区三区国产精品| 亚洲国产精品国自产拍av秋霞| 欧美精品v日韩精品v韩国精品v| 亚洲精品视频免费观看| 国产精品国产a级| 久久精品主播| 亚洲美女精品久久| 国产精品视频网站| 蜜臀av国产精品久久久久| 亚洲精品中文字幕在线| 国产精品少妇自拍| 欧美v日韩v国产v| 午夜精品久久久久久久99热浪潮 | 狠狠色香婷婷久久亚洲精品| 久久综合国产精品| 中文一区在线| 影音欧美亚洲| 国产精品永久免费视频| 欧美大片在线观看一区二区| 亚洲主播在线播放| 亚洲国产日韩一级| 国产欧美 在线欧美| 欧美精品激情blacked18| 午夜亚洲性色视频| 亚洲免费成人av电影| 国内精品一区二区三区| 欧美体内谢she精2性欧美| 久久全球大尺度高清视频| 亚洲手机视频| 亚洲日韩成人| 黄色成人av| 国产精品一区毛片| 欧美视频精品一区| 欧美成人69av| 久久天堂成人| 久久精品一本久久99精品| 中文亚洲欧美| 亚洲免费观看高清完整版在线观看| 国产亚洲一级| 国产伦精品一区二区三区照片91| 欧美激情亚洲一区| 欧美a级片网| 男人的天堂成人在线| 久久美女性网| 久久久久久久综合色一本| 亚洲欧美日韩高清| 亚洲一区二区日本| 这里只有精品视频| 99这里只有精品| 亚洲精品专区| 一区二区三区精品视频| 亚洲狼人综合| 一区二区不卡在线视频 午夜欧美不卡在 | 久久久久综合一区二区三区| 亚洲欧美视频一区二区三区| 亚洲一区免费视频| 西西人体一区二区| 欧美一级理论性理论a| 欧美亚洲综合另类| 久久精品国产第一区二区三区最新章节 | 亚洲影院色无极综合| 亚洲香蕉网站| 午夜激情综合网| 久久精品国产欧美激情| 久久青青草原一区二区| 免费成人av| 欧美日韩一区三区| 国产精品美女www爽爽爽| 国产精品视频一二三| 国产日韩在线播放| 亚洲动漫精品| 日韩天堂在线观看| 亚洲综合欧美日韩| 久久免费视频这里只有精品| 久久综合一区二区三区| 欧美精品情趣视频| 国产美女精品免费电影| 国产自产女人91一区在线观看| 韩国视频理论视频久久| 91久久久久久国产精品| 99视频精品全部免费在线| 亚洲欧美日韩精品综合在线观看| 午夜视频在线观看一区二区| 久久久久久久久综合| 欧美精品亚洲一区二区在线播放| 国产精品久久激情| 在线观看av不卡| 亚洲欧美激情视频在线观看一区二区三区| 久久福利资源站| 欧美日韩1080p| 精品福利av|