日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

22计算机408考研—数据结构—排序(详解加例题)

發(fā)布時(shí)間:2023/12/20 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 22计算机408考研—数据结构—排序(详解加例题) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2022計(jì)算機(jī)考研408—數(shù)據(jù)結(jié)構(gòu)—排序
手把手教學(xué)考研大綱范圍內(nèi)的排序
22考研大綱數(shù)據(jù)結(jié)構(gòu)要求的是C/C++,筆者以前使用的都是Java,對(duì)于C++還很欠缺,
如有什么建議或者不足歡迎大佬評(píng)論區(qū)或者私信指出

Talk is cheap. Show me the code.
理論到處都有,代碼加例題自己練習(xí)才能真的學(xué)會(huì)

排序過(guò)程步驟顯示

文末投票:下篇22考研數(shù)據(jù)結(jié)構(gòu)的博客寫什么(歡迎評(píng)論區(qū)指出)

排序定義
冒泡排序
直接插入排序
二分插入排序
希爾排序?
快速排序
二路歸并排序?
基數(shù)排序(附加計(jì)數(shù)排序)?
簡(jiǎn)單選擇排序
堆排序??

排序

排序的基本概念

顧名思義,給一個(gè)無(wú)序數(shù)組的值進(jìn)行順序存儲(chǔ)

原數(shù)組:2 3 1 5 6 4 8 9 7 排序后:1 2 3 4 5 6 7 8 9

冒泡排序

思路
從頭到尾每?jī)蓚€(gè)相鄰的元素,進(jìn)行比較,前面的比后面的大就進(jìn)行交換
循環(huán)一遍后,數(shù)組元素最大的就到了最后面,
第二次循環(huán)的時(shí)候,就可以不循環(huán)到最后一個(gè)了,最后一個(gè)上次循環(huán)已經(jīng)是整個(gè)數(shù)組最大的值了
然后把這次最大的放到倒數(shù)第二個(gè)元素,
第三次循環(huán)的就可以忽略最后兩個(gè)元素
以此類推,全部循環(huán)后,即可完成排序

#include <iostream> #include <vector>using namespace std;void bubbleSort(vector<int> &num); int main() {int n; //n為將要輸入的數(shù)組長(zhǎng)度cin >> n; //輸入n cin方法需要上面使用stdvector<int> num; //定義vector 記得上面導(dǎo)入vectorint temp; //temp為輸入vector時(shí)的中間變量for (int i = 0; i < n; i++) {cin >> temp; //輸入num.push_back(temp);}bubbleSort(num); //調(diào)用自定義的排序方法cout << "排序后" << "\n";for (int i = 0; i < num.size(); i++) {cout << num[i] << " "; //輸出}return 0; }void bubbleSort(vector<int> &num) {for (int i = 0; i < num.size(); i++) {for (int j = 0; j < num.size() - i; j++) {if (num[j] > num[j + 1]) { // int temp = num[j]; // num[j] = num[j + 1]; // num[j + 1] = temp;num[j] ^= num[j + 1]; //兩兩相鄰交換 上面注釋代碼的功能與此功能相等num[j + 1] ^= num[j];num[j] ^= num[j + 1];}}//每次循環(huán)都把數(shù)組的變動(dòng)輸出出來(lái)for (int j = 0; j < num.size(); j++) {cout << num[j] << " ";}cout << "\n";} }

//冒泡排序的變種#include <iostream> #include <vector>using namespace std;void bubbleSort(vector<int> &num); int main() {int n; //n為將要輸入的數(shù)組長(zhǎng)度cin >> n; //輸入n cin方法需要上面使用stdvector<int> num; //定義vector 記得上面導(dǎo)入vectorint temp; //temp為輸入vector時(shí)的中間變量for (int i = 0; i < n; i++) {cin >> temp; //輸入num.push_back(temp);}bubbleSort(num); //調(diào)用自定義的排序方法for (int i = 0; i < num.size(); i++) {cout << num[i] << " "; //輸出}return 0; }void bubbleSort(vector<int> &num) {int flag = 1; //flag用來(lái)判斷,如果本次循環(huán)沒(méi)有進(jìn)行交換,該數(shù)組為有序數(shù)組int arrBoundary = num.size() - 1; //用來(lái)記錄上一次循環(huán)最后一次交換位置,后面沒(méi)有交換的是有序的int largestSwapIndex = 0; //記錄最后一次交換的位置for (int i = 0; i < num.size(); i++) {flag = 1;for (int j = 0; j < arrBoundary ; j++) {if (num[j] > num[j + 1]) {int temp = num[j];num[j] = num[j + 1];num[j + 1] = temp;flag = 0; //發(fā)生交換就改為0largestSwapIndex = j; //交換位置就給largestSwapIndex}}arrBoundary = largestSwapIndex; //把當(dāng)前循環(huán)交換的最后一個(gè)下標(biāo)給arrBoundaryif (flag) { //如果本次循環(huán)沒(méi)有交換任何值,證明當(dāng)前數(shù)組為有序數(shù)組break;}}}

直接插入排序

思路
插入 == 把數(shù)插進(jìn)去
也是兩層循環(huán)
數(shù)組num

第一層循環(huán)從下標(biāo)為1的值開始,循環(huán)變量為i
第二層循環(huán)就是把第一層的值拿出來(lái),然后從第i-1個(gè)向前循環(huán),找到第一個(gè)小于 num[i] 的值,
這個(gè)值的下標(biāo)如果是j-1的話,那么 num[j] 就是第一個(gè)大于 num[i] 的值
num[i] 用一個(gè)變量 temp 保存一下
把下標(biāo)為j到i-1的值依次向后移動(dòng)一位,也就是說(shuō)下標(biāo)j到i-1的值移動(dòng)到j(luò)+1到i,
然后把 temp(原num[i])放到下標(biāo)為j的地方(之前的num[j]已經(jīng)移動(dòng)到num[j+1]了),

按照這種排序,每次循環(huán)的都是i之前的,i之前的元素都是順序存儲(chǔ)的,
文字表述的不清楚的可以看每次循環(huán)i更改后數(shù)組的元素情況

#include <iostream> #include <vector>using namespace std;void insertSort(vector<int> &num); int main() {int n; //n為將要輸入的數(shù)組長(zhǎng)度cin >> n; //輸入n cin方法需要上面使用stdvector<int> num; //定義vector 記得上面導(dǎo)入vectorint temp; //temp為輸入vector時(shí)的中間變量for (int i = 0; i < n; i++) {cin >> temp; //輸入num.push_back(temp);}insertSort(num); //調(diào)用自定義的排序方法cout << "排序后" << "\n";for (int i = 0; i < num.size(); i++) {cout << num[i] << " "; //輸出}return 0; }void insertSort(vector<int> &num) {for (int i = 1; i < num.size(); i++) {int temp = num[i]; //保存一下num[i]int j;//從num[j]向前開始找,一直找到比temp(原num[i])小的數(shù)就結(jié)束//在循環(huán)過(guò)程中的數(shù)都比temp大的,不斷地把temp大的數(shù)往后移動(dòng)一位//由此可得,等找到num[j]<=temp的時(shí)候,循環(huán)已經(jīng)結(jié)束了// 但是他的上一個(gè),也就是num[j+1]的值已經(jīng)移動(dòng)到num[j+2]了for (j = i - 1; j >= 0 && num[j] > temp; j--) {num[j + 1] = num[j];}//可以直接把temp放到num[j+1],num[j + 1] = temp;//每次循環(huán)都可以把num[i]以及之前的數(shù)值排序好//每次循環(huán)都把數(shù)組的變動(dòng)輸出出來(lái)for(j = 0; j < num.size(); j++) {cout << num[j] << " ";}cout <<"\n";} }

運(yùn)行截圖:

二分插入排序

思路
二分插入和簡(jiǎn)單插入基本類似
不過(guò)是在尋找插入位置的時(shí)候不在采用簡(jiǎn)單插入的循環(huán)查找,而是使用二分查找
減少比較的次數(shù),提升效率

#include <iostream> #include <vector>using namespace std;void binInsertSort(vector<int> &num); int main() {int n; //n為將要輸入的數(shù)組長(zhǎng)度cin >> n; //輸入n cin方法需要上面使用stdvector<int> num; //定義vector 記得上面導(dǎo)入vectorint temp; //temp為輸入vector時(shí)的中間變量for (int i = 0; i < n; i++) {cin >> temp; //輸入num.push_back(temp);}binInsertSort(num); //調(diào)用自定義的排序方法cout << "排序后" << "\n";for (int i = 0; i < num.size(); i++) {cout << num[i] << " "; //輸出}return 0; }void binInsertSort(vector<int> &num) {for (int i = 1; i < num.size(); i++) {int temp = num[i]; //保存臨時(shí)變量int left = 0; //使用二分法找到插入的位置left 使得num[left]<temp<num[left+1]int right = i - 1;while (left <= right) {int mid = (left + right) / 2;if (num[mid] > temp) {right = mid - 1;} else {left = mid + 1;}}for (int j = i - 1; j >= left; j--) {num[j + 1] = num[j]; //把left右面的值全部右移一位,}num[left] = temp; //把temp放到num[left]的位置//每次循環(huán)都把數(shù)組的變動(dòng)輸出出來(lái)for (int j = 0; j < num.size(); j++) {cout << num[j] << " ";}cout << "\n";} }

希爾排序

思路

希爾排序其實(shí)可以看做是插入排序的變種
插入排序是循環(huán)到某個(gè)元素就像前找合適的位置,把當(dāng)前元素到合適位置的值都要向后移動(dòng)一遍
插入排序?qū)τ谟行虻臄?shù)組,比較和移動(dòng)的次數(shù)都比較少
希爾排序就是把插入排序進(jìn)行分組化

分組是按照長(zhǎng)度每次除2分的,這樣最后一次肯定是一個(gè)組一個(gè)元素,就相當(dāng)于最原始的插入排序了
而他前面做的按組排序就是為了讓這個(gè)數(shù)組變成一個(gè)有大概順序的數(shù)組,使后面的插入排序能減少比較和移動(dòng)的次數(shù)

按下圖為例子,數(shù)組長(zhǎng)度15 第一次按照7個(gè)增量分組,第二次按照3個(gè)增量,第三次按照1個(gè)增量分組第一次循環(huán)的增量為7 第一次是下標(biāo) 00+7比較 11+7比較 …… 77+7比較 第一次循環(huán)完,這些位置上有了個(gè)大概的順序第二次循環(huán)的增量為3 第二次是下標(biāo) 036912比較 1471013 2581114 第二次循環(huán)完,這些位置上有了大概的順序第三次循環(huán)的增量為1 就相當(dāng)于簡(jiǎn)單的插入排序

希爾排序的精髓就在于,對(duì)于一個(gè)大概有序的數(shù)組,插入排序的比較和移動(dòng)次數(shù)都比較少

PS:小編作圖能力有限,上圖是當(dāng)來(lái)的

//除main方法外的其他cout輸出都是為了讓讀者更清楚的了解每次循環(huán)后進(jìn)行排序的下標(biāo) #include <iostream> #include <vector>using namespace std;void shellSort(vector<int> &num);int main() {int n; //n為將要輸入的數(shù)組長(zhǎng)度cin >> n; //輸入n cin方法需要上面使用stdvector<int> num; //定義vector 記得上面導(dǎo)入vectorint temp; //temp為輸入vector時(shí)的中間變量for (int i = 0; i < n; i++) {cin >> temp; //輸入num.push_back(temp);}shellSort(num); //調(diào)用自定義的排序方法cout << "\n\n排序后" << "\n";for (int i = 0; i < num.size(); i++) {cout << num[i] << " "; //輸出}return 0; }void shellSort(vector<int> &num) {int len = num.size();for (int d = len / 2; d > 0; d/=2) { //按照增量分組,增量每次/2cout << "\n\n增量為" << d;for (int i = d; i < len; i++) { //類似插入排序,每次都比較i之前的,cout << "\n此次排序的下標(biāo)為:" << i;for (int j = i - d; j >=0; j-=d) {cout << " " << j;//這里i-d其實(shí)也就是從前面開始,// j每次都是j-=d,因?yàn)槲覀兪前凑障嗤隽糠譃橐唤M的// 對(duì)比上圖更容易理解if (num[j] > num[j + d]) { //只要前面的比后面的大,就交換位置int temp = num[j];num[j] = num[j + d];num[j + d] = temp;}}//每次循環(huán)都把數(shù)組的變動(dòng)輸出出來(lái)cout << "\n";for (int j = 0; j < num.size(); j++) {cout << num[j] << " ";}}} }

快速排序

思路
從未排序的數(shù)組中,一個(gè)一個(gè)的尋找,尋找當(dāng)前值應(yīng)該在排序后數(shù)組的位置,
以此類推,把每個(gè)值的位置都確定了以后,此數(shù)組就變成了排序后的數(shù)組
也是分段進(jìn)行確定某個(gè)值最終排序后的下標(biāo)

先選取第一個(gè)值,用一個(gè)臨時(shí)變量保存這個(gè)值,然后雙指針i表示這段范圍的開頭,j這段范圍的結(jié)尾 j負(fù)責(zé)從后向前找小于臨時(shí)變量的值,找到以后就把j的值放到i那,此時(shí)j位置就空出來(lái)了,我們當(dāng)作把臨時(shí)變量的值放到j(luò)這里i負(fù)責(zé)從前向后找大于臨時(shí)變量的值,找到后就放到j(luò)那里,此時(shí)i位置就空出來(lái)了,我們同樣當(dāng)作把臨時(shí)變量的值放到i這里不斷循環(huán)這兩步的操作,i是從前向后,j是從后向前循環(huán)結(jié)束的條件就是i==j 也就是臨時(shí)變量排序后數(shù)組的位置,按照這種排序方式,結(jié)束后,比臨時(shí)變量小的都在臨時(shí)變量左邊(左邊不一定是排好序的),比臨時(shí)變量大的都在臨時(shí)變量右邊(右邊不一定是排好序的),也就是說(shuō)臨時(shí)變量當(dāng)前的下標(biāo)就是排序后的下標(biāo) 當(dāng)前臨時(shí)變量的位置確定好以后,我們可以分為前半部分和后半部分繼續(xù)這種操作 以此類推,當(dāng)每個(gè)值最終排序后的位置都確定的時(shí)候,此數(shù)組為排序后的數(shù)組

下圖為確定好一個(gè)值的最終位置的排序圖

臨時(shí)變量為50,左指針low,右指針high

右指針找到20比臨時(shí)變量小,交換兩個(gè)值

左指針找到90比臨時(shí)變量大,交換兩個(gè)值

右指針找到40比臨時(shí)變量小,交換兩個(gè)值位置

左指針找到70比臨時(shí)變量小,交換兩個(gè)值的位置

右指針左移與左指針重合,當(dāng)前位置為50排序后的最終位置

我們發(fā)現(xiàn),左邊的數(shù)都比50小,右邊的數(shù)都比50大,
當(dāng)前數(shù)的位置就是排序后當(dāng)前數(shù)的位置 然后在把左邊的數(shù)組按照這種方法,右邊的數(shù)組按照這種方法
以此類推每個(gè)值的最終下標(biāo)都確定下來(lái)了,數(shù)組為排序后的數(shù)組
PS:圖仍然是某度當(dāng)來(lái)的o( ̄▽ ̄)ブ

#include <iostream> #include <vector>using namespace std;void quickSort(vector<int> &num, int left, int right);int main() {int n; //n為將要輸入的數(shù)組長(zhǎng)度cin >> n; //輸入n cin方法需要上面使用stdvector<int> num; //定義vector 記得上面導(dǎo)入vectorint temp; //temp為輸入vector時(shí)的中間變量for (int i = 0; i < n; i++) {cin >> temp; //輸入num.push_back(temp);}quickSort(num, 0, num.size() - 1); //調(diào)用自定義的排序方法cout << "\n\n排序后" << "\n";for (int i = 0; i < num.size(); i++) {cout << num[i] << " "; //輸出}return 0; }void quickSort(vector<int> &num, int left, int right) {if (left >= right) return; //如果左節(jié)點(diǎn)>=右節(jié)點(diǎn)了,證明排序結(jié)束了,返回即可int temp = num[left]; //保存一下當(dāng)前左節(jié)點(diǎn)的值,此次排序就是確定當(dāng)前左節(jié)點(diǎn)的值int l = left; //保存一下原始的左右邊界int r = right;while (left < right) { //循環(huán)的結(jié)束條件就是左指針 == 右指針,相等時(shí)就為temp排序后的最終位置while (left < right && temp < num[right]) { //右指針找比temp小的值,如果沒(méi)找到就一直找right--;}if (left < right) { //上面循環(huán)結(jié)束了就證明找到了,如果left == right,那么最終位置就確定好了,num[left] = num[right]; //然后把比temp小的放到左面left位置那里,然后left指向下一個(gè)值left++; //可能這里有些疑問(wèn),上面描述的是交換,這里沒(méi)有交換,實(shí)際上每次都交換,換來(lái)?yè)Q去,每次都重復(fù)換temp這個(gè)數(shù)} //不如直接賦值,然后把這個(gè)重復(fù)數(shù)直接放到最后確定的位置while (left < right && num[left] < temp) { //這里是左指針找比temp大的數(shù),找到就退出循環(huán)了,left++;}if (left < right) { //與上面相反的道理,把比temp大的數(shù)放到right,right指針左移num[right] = num[left];right--;}}num[left] = temp; //循環(huán)結(jié)束就是確定了temp最終的位置,左指針==右指針//每次循環(huán)都把數(shù)組的變動(dòng)輸出出來(lái)cout << "\n左邊界下標(biāo):" << l << " 右邊界下標(biāo):" << r << " 當(dāng)前循環(huán)確定的下標(biāo)為:" << left << "\n";for (int j = 0; j < num.size(); j++) {cout << num[j] << " ";}quickSort(num, l, left - 1); //temp確定好了位置,把temp左面的數(shù)組和右面的數(shù)組分別進(jìn)行這種方法排序quickSort(num, left + 1, r); //當(dāng)每個(gè)值的下標(biāo)都確定的時(shí)候,該數(shù)組以完成排序 }

二路歸并排序

思路
二路歸并,就是把一個(gè)數(shù)組,先分開,然后在合并的過(guò)程中逐步排序
二路就是分開的時(shí)候每次分成兩個(gè),分成兩種路
歸并就是把他分開在合上

二路分割數(shù)組,一直把數(shù)組分割到一路只有一個(gè)數(shù)為止
然后再把他們兩路合一路,兩路合一路,在合路的過(guò)程中把無(wú)序的路合成有序的路,慢慢的合成后的路都為有序的路,大致原理如下圖

分路沒(méi)有什么說(shuō)的,一分為,對(duì)半分即可
合路的時(shí)候,AB兩個(gè)路合成C路,分別兩個(gè)指針i,j,k對(duì)應(yīng)著A,B,C數(shù)組的下標(biāo)
循環(huán)AB兩個(gè)數(shù)組,每次都比較A[i]與B[j] 取兩個(gè)數(shù)組中對(duì)應(yīng)值小的放到C[k]
然后k下標(biāo)右移,i或者j小的下標(biāo)右移,完全循環(huán)后,C==A+B的有序路

#include <iostream> #include <vector>using namespace std;void mergeSort(vector<int> &num, int left, int right);int main() {int n; //n為將要輸入的數(shù)組長(zhǎng)度cin >> n; //輸入n cin方法需要上面使用stdvector<int> num; //定義vector 記得上面導(dǎo)入vectorint temp; //temp為輸入vector時(shí)的中間變量for (int i = 0; i < n; i++) {cin >> temp; //輸入num.push_back(temp);}mergeSort(num, 0, num.size() - 1); //調(diào)用自定義的排序方法cout << "\n\n排序后" << endl;for (int i = 0; i < num.size(); i++) {cout << num[i] << " "; //輸出}return 0; }void mergeSort(vector<int> &num, int left, int right) {if (left == right) return; //如果左節(jié)點(diǎn)和右節(jié)點(diǎn)相等,說(shuō)明就分到底了,一路只剩下一個(gè)元素int m = (left + right) / 2; //左節(jié)點(diǎn)和右節(jié)點(diǎn)的中間節(jié)點(diǎn),從中間節(jié)點(diǎn)分路,左面一路,右面一路mergeSort(num, left, m); //先分左面->左面進(jìn)入后還會(huì)從上面再來(lái),接著分,一直分到一路只有一個(gè)元素mergeSort(num, m + 1, right); //再分右面//走到這里說(shuō)明已經(jīng)分完了,接下來(lái)就是合并int temp [right - left + 1]; //定義一個(gè)數(shù)組,用來(lái)存兩路合并后的有序數(shù)組int l = left; //左路起始點(diǎn)下標(biāo)int r = m + 1; //右路起始點(diǎn)下標(biāo)int k = 0; //合路的起始點(diǎn)下標(biāo)while (l <= m && r <= right) { //每次放到時(shí)候比較對(duì)應(yīng)的值,小的值放到前面,l要在左路的范圍內(nèi),r要在右路的范圍內(nèi)if (num[l] <= num[r]) { //誰(shuí)小把誰(shuí)放到合路temp[k++] = num[l++];} else {temp[k++] = num[r++];}}//下面兩個(gè)while循環(huán)處理的是一路全部放進(jìn)合路了,另一路沒(méi)有完全放進(jìn),循環(huán)的作用就是把兩路上面沒(méi)放進(jìn)去的全部放進(jìn)去while (l <= m) {temp[k++] = num[l++];}while (r <= right) {temp[k++] = num[r++];}//temp就是我們合路,然后我們把合好的路放回到num原數(shù)組中for (int i = left, k = 0; i <= right; i++, k++) {num[i] = temp[k];}//每次循環(huán)都把數(shù)組的變動(dòng)輸出出來(lái)cout << "此次合并的是下標(biāo):" << left << "-" << right << "\n";for (int j = 0; j < num.size(); j++) {cout << num[j] << " ";}cout << "\n"; }

Acwing,這個(gè)題就是歸并排序 788. 逆序?qū)Φ臄?shù)量給定一個(gè)長(zhǎng)度為 n 的整數(shù)數(shù)列,請(qǐng)你計(jì)算數(shù)列中的逆序?qū)Φ臄?shù)量。逆序?qū)Φ亩x如下:對(duì)于數(shù)列的第 i 個(gè)和第 j 個(gè)元素,如果滿足 i<j 且 a[i]>a[j],則其為一個(gè)逆序?qū)?#xff1b;否則不是。輸入格式 第一行包含整數(shù) n,表示數(shù)列的長(zhǎng)度。第二行包含 n 個(gè)整數(shù),表示整個(gè)數(shù)列。輸出格式 輸出一個(gè)整數(shù),表示逆序?qū)Φ膫€(gè)數(shù)。數(shù)據(jù)范圍 1≤n≤100000, 數(shù)列中的元素的取值范圍 [1,109]。輸入樣例: 6 2 3 4 5 6 1 輸出樣例: 5#include <iostream> #include <vector>using namespace std;void mergeSort(vector<int> &num, int left, int right);int res = 0; int main() {int n; //n為將要輸入的數(shù)組長(zhǎng)度cin >> n; //輸入n cin方法需要上面使用stdvector<int> num; //定義vector 記得上面導(dǎo)入vectorint temp; //temp為輸入vector時(shí)的中間變量for (int i = 0; i < n; i++) {cin >> temp; //輸入num.push_back(temp);}mergeSort(num, 0, num.size() - 1); //調(diào)用自定義的排序方法cout << res;return 0; }void mergeSort(vector<int> &num, int left, int right) {if (left == right) return; //如果左節(jié)點(diǎn)和右節(jié)點(diǎn)相等,說(shuō)明就分到底了,一路只剩下一個(gè)元素int m = (left + right) / 2; //左節(jié)點(diǎn)和右節(jié)點(diǎn)的中間節(jié)點(diǎn),從中間節(jié)點(diǎn)分路,左面一路,右面一路mergeSort(num, left, m); //先分左面->左面進(jìn)入后還會(huì)從上面再來(lái),接著分,一直分到一路只有一個(gè)元素mergeSort(num, m + 1, right); //再分右面//走到這里說(shuō)明已經(jīng)分完了,接下來(lái)就是合并int temp [right - left + 1]; //定義一個(gè)數(shù)組,用來(lái)存兩路合并后的有序數(shù)組int l = left; //左路起始點(diǎn)下標(biāo)int r = m + 1; //右路起始點(diǎn)下標(biāo)int k = 0; //合路的起始點(diǎn)下標(biāo)while (l <= m && r <= right) { //每次放到時(shí)候比較對(duì)應(yīng)的值,小的值放到前面,l要在左路的范圍內(nèi),r要在右路的范圍內(nèi)if (num[l] <= num[r]) { //誰(shuí)小把誰(shuí)放到合路temp[k++] = num[l++];} else {temp[k++] = num[r++];res += m - l + 1; //當(dāng)前l(fā)大于r證明l到m的數(shù)都大于r//歸并就是一段一段的排好序的數(shù)組合并起來(lái)的}}//下面兩個(gè)while循環(huán)處理的是一路全部放進(jìn)合路了,另一路沒(méi)有完全放進(jìn),循環(huán)的作用就是把兩路上面沒(méi)放進(jìn)去的全部放進(jìn)去while (l <= m) {temp[k++] = num[l++];}while (r <= right) {temp[k++] = num[r++];}//temp就是我們合路,然后我們把合好的路放回到num原數(shù)組中for (int i = left, k = 0; i <= right; i++, k++) {num[i] = temp[k];}}

基數(shù)排序

說(shuō)基數(shù)排序之前,先大概說(shuō)一下計(jì)數(shù)排序

計(jì)數(shù)排序

計(jì)數(shù)排序就是把元素的值當(dāng)作下標(biāo)使用,數(shù)量用那個(gè)下標(biāo)對(duì)應(yīng)的值記錄
例如int num[]={5,2,1,4,3,2,1,2,6,4,1,2,5,2}
這樣的數(shù)組我們就用計(jì)數(shù)排序
count的長(zhǎng)度是上面數(shù)組的最大值-最小值+1或者最大值-最小值+1
循環(huán)上面的數(shù)組 count[num[i]]++;
到時(shí)候判斷這個(gè)值存不存在,直接判斷count[值]是否大于0
顯而易見(jiàn),計(jì)數(shù)排序的缺點(diǎn)就是如果數(shù)組中最大值很大,那么這個(gè)效率會(huì)很低

leetcode 計(jì)數(shù)排序例題 1122. 數(shù)組的相對(duì)排序 給你兩個(gè)數(shù)組,arr1 和 arr2,arr2 中的元素各不相同 arr2 中的每個(gè)元素都出現(xiàn)在 arr1 中 對(duì) arr1 中的元素進(jìn)行排序,使 arr1 中項(xiàng)的相對(duì)順序和 arr2 中的相對(duì)順序相同。未在 arr2 中出現(xiàn)過(guò)的元素需要按照升序放在 arr1 的末尾。示例:輸入:arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6] 輸出:[2,2,2,1,4,3,3,9,6,7,19]提示:1 <= arr1.length, arr2.length <= 1000 0 <= arr1[i], arr2[i] <= 1000 arr2 中的元素 arr2[i] 各不相同 arr2 中的每個(gè)元素 arr2[i] 都出現(xiàn)在 arr1 中class Solution {//arr2的數(shù)在arr1中一定出現(xiàn)//arr1的數(shù)不一定在arr2中有//arr2在arr1中出現(xiàn)過(guò)的數(shù),按照arr2的相對(duì)順序排列,arr1中剩下的數(shù)按照升序排在后面 public:vector<int> relativeSortArray(vector<int>& arr1, vector<int>& arr2) {int upper = *max_element(arr1.begin(), arr1.end());vector<int> count(upper + 1);//arr1中的數(shù)計(jì)數(shù)放到countfor (int x: arr1) {++count[x];}vector<int> ans;//如果arr1出現(xiàn)的數(shù),arr2也出現(xiàn)了就輸出//這樣就是按照arr2的相對(duì)順序輸出for (int x: arr2) {for (int i = 0; i < count[x]; ++i) {ans.push_back(x);}//arr2出現(xiàn)的數(shù)字,就添加到ans里面,//添加過(guò)就把這個(gè)數(shù)字清零了,count[x] = 0;}//把剩下的未在arr2中出現(xiàn)的按照升序輸出for (int x = 0; x <= upper; ++x) {for (int i = 0; i < count[x]; ++i) {ans.push_back(x);}}return ans;} };

再回來(lái)說(shuō)基數(shù)排序
基數(shù)排序也是大概這個(gè)意思,不過(guò)不是直接把值當(dāng)作下標(biāo),而是把值的每一位當(dāng)作下標(biāo)排序
這個(gè)也需要保存一下最大值,因?yàn)橐袛嘧罡哂卸嗌傥弧?br /> 先把個(gè)位放進(jìn)去,排序,再把十位放進(jìn)去排序,然后……

把個(gè)位放進(jìn)去后,就按照個(gè)位排序好了,把數(shù)取出,記得按照順序取出, 然后十位放進(jìn)去排序,把數(shù)按順序取出……
思路大概就是這樣
順序放入順序取出,在進(jìn)行下一位的排序
PS:
如果是Java的話,直接用一個(gè)ArrayList[] temp; 這種數(shù)組就可以


PS:當(dāng)來(lái)的圖片

#include <iostream> #include <vector>using namespace std;void radixSort(vector<int> &num);int main() {int n; //n為將要輸入的數(shù)組長(zhǎng)度cin >> n; //輸入n cin方法需要上面使用stdvector<int> num; //定義vector 記得上面導(dǎo)入vectorint temp; //temp為輸入vector時(shí)的中間變量for (int i = 0; i < n; i++) {cin >> temp; //輸入num.push_back(temp);}radixSort(num); //調(diào)用自定義的排序方法cout << "\n\n排序后" << endl;for (int i = 0; i < num.size(); i++) {cout << num[i] << " "; //輸出}return 0; }void radixSort(vector<int> &num) {int max = -1;for (int i = 0; i < num.size(); i++) {max = max < num[i] ? num[i] : max;}int temp[num.size()];int count[10] = {0};for (int i = 0; i < num.size(); i++) {temp[i] = 0; //初始化temp賦值0}for (int places = 1; places <= max; places *= 10) { //基數(shù)排序就是按照位數(shù)進(jìn)行排序,所以循環(huán)的次數(shù)就是數(shù)字位數(shù)for (int i = 0; i < num.size(); i++) {count[(num[i] / places) % 10]++; // 記錄一下當(dāng)前位上,各個(gè)數(shù)字的個(gè)數(shù)} //count[3]如果是5 就代表的個(gè)位為3的數(shù)是5個(gè)//當(dāng)前位置上各個(gè)數(shù)字的個(gè)數(shù)確定了,我們就可以確定當(dāng)前位某個(gè)數(shù)字的范圍了//count[0] = 3, count[1] = 4, count[2] = 7, count[3] = 2……//當(dāng)前位上為0的數(shù)在此次排序后的位置為數(shù)組1-3,當(dāng)前位為1的數(shù)在此次位置為4-7,當(dāng)前位為2的數(shù)的范圍8-14……//也就是前面的和,加起來(lái),得出的count[i] 就是當(dāng)前位為i的數(shù)的范圍的右邊界for (int i = 1; i < 10; i++) {count[i] = count[i - 1] + count[i];}//因?yàn)槲覀兩厦鎐ount[i]得出的是當(dāng)前位為i的時(shí)候的右邊界,所以排序后的數(shù)組我們也應(yīng)該從右面放//如果這里我們從左面開始放就會(huì)把放入的順序弄反,我們已知右邊界,然后把數(shù)字從右開始放順序是正的//當(dāng)然我們上一步也可以求每段范圍的左邊界,如果求得是左邊界就可以從左放for (int i = num.size() - 1; i >= 0; i--) {int k = (num[i] / places) % 10; //count[k]就是當(dāng)前位為k的值的右邊界temp[count[k] - 1] = num[i]; //這里的右邊界我們用的是位置,下標(biāo)要記得-1count[k]--; //當(dāng)前位為k的數(shù)放進(jìn)去后,count[k]要-1 因?yàn)橐呀?jīng)放進(jìn)去一個(gè)數(shù)了,右邊界左移一位}//當(dāng)所有的都循環(huán)完以后,count[i]代表的是當(dāng)前位為i的數(shù)字范圍的左邊界for (int i = 0; i < 10; i++) {count[i] = 0;}//把此次排序的數(shù)組放到num中for (int i = 0; i < num.size(); i++) {num[i] = temp[i];}//輸出展示此次排序后的數(shù)組cout << "\n哪一位是1,此次排序就是排的哪一位 " << places << "\n";for (int i = 0; i < num.size(); i++) {cout << num[i] << " ";}}}

簡(jiǎn)單選擇排序

思路
簡(jiǎn)單選擇排序,顧名思義,簡(jiǎn)單的選擇一個(gè)元素排序
兩層循環(huán),第一層循環(huán)就是循環(huán)每一位
第二層循環(huán),定義臨時(shí)變量保存當(dāng)前下標(biāo),循環(huán)后面每一位,
如果找到比當(dāng)前下標(biāo)對(duì)應(yīng)的值小的,那么就用這個(gè)變量保存這個(gè)值小的下標(biāo),一直循環(huán)到結(jié)束
第一層循環(huán)結(jié)束后,變量保存的就是整個(gè)數(shù)組最小的值的下標(biāo),與第一位交換,第一位就是最小的值
如此往復(fù),第二次循環(huán),就從第二位開始向后找,記錄除第一位最小的值的下標(biāo),循環(huán)結(jié)束后與第二位進(jìn)行交換
以此類推,循環(huán)后即可完成排序。

#include <iostream> #include <vector>using namespace std;void selectSort(vector<int> &num);int main() {int n; //n為將要輸入的數(shù)組長(zhǎng)度cin >> n; //輸入n cin方法需要上面使用stdvector<int> num; //定義vector 記得上面導(dǎo)入vectorint temp; //temp為輸入vector時(shí)的中間變量for (int i = 0; i < n; i++) {cin >> temp; //輸入num.push_back(temp);}selectSort(num); //調(diào)用自定義的排序方法cout << "排序后" << "\n";for (int i = 0; i < num.size(); i++) {cout << num[i] << " "; //輸出}return 0; }void selectSort(vector<int> &num) {for (int i = 0; i < num.size(); i++) { //循環(huán)每一位int temp = i; //保存當(dāng)前位的下標(biāo)for (int j = i + 1; j < num.size(); j++) { //循環(huán)后面每一位,找到值比當(dāng)前小的就保存值小的下標(biāo)if (num[j] < num[temp]) {temp = j;}}int n = num[i]; //temp保存的是i后面最小值的下標(biāo),與下標(biāo)為i的值交換num[i] = num[temp]; //如此往復(fù),小的值到了前面,次小的到了第二位,……num[temp] = n;//每次循環(huán)都把數(shù)組的變動(dòng)輸出出來(lái)for (int j = 0; j < num.size(); j++) {cout << num[j] << " ";}cout << "\n";} }

運(yùn)行結(jié)果如下:

堆排序

思路
首先要強(qiáng)調(diào)一下,堆排序并不是要構(gòu)成一個(gè)堆,它本身還是個(gè)數(shù)組,只不過(guò)是我們?cè)谂判虻臅r(shí)候把他看成一個(gè)堆,他實(shí)際上還是一個(gè)數(shù)組
我們這里用到的堆是大根堆和小根堆,他們都是完全二叉樹
完全二叉樹就是他們結(jié)點(diǎn)位置和滿二叉樹的位置是一樣的

紅色角標(biāo)為真實(shí)數(shù)組的下標(biāo)


PS:圖片來(lái)源
這是大根堆和小根堆

完全二叉樹和滿二叉樹基本相同
每一層的數(shù)量都是上一層的二倍
某一層最左邊結(jié)點(diǎn)下標(biāo)*2就是最右邊結(jié)點(diǎn)下標(biāo)

完全二叉樹中子結(jié)點(diǎn)和父結(jié)點(diǎn)之間還有一些顯著的關(guān)系
一個(gè)數(shù)的下標(biāo)為x
他的父節(jié)點(diǎn)下標(biāo)為(x - 1)/ 2 這里的除2是計(jì)算機(jī)除2,不保存余數(shù),整除不成為小數(shù)
他的左子結(jié)點(diǎn)為 2 * x + 1
他的右子結(jié)點(diǎn)為 2 * x + 2

如果還不明白,可以自己帶個(gè)結(jié)點(diǎn)試一下(看堆分析容易理解)
(左子結(jié)點(diǎn)-1)/2就是父節(jié)點(diǎn) (右子結(jié)點(diǎn) - 1)/2也是父節(jié)點(diǎn),它除2的時(shí)候會(huì)把余數(shù)直接省去

大根堆就是 父節(jié)點(diǎn) > 左子結(jié)點(diǎn) 并且 父節(jié)點(diǎn) > 右子結(jié)點(diǎn)
小根堆就是 父節(jié)點(diǎn) < 左子結(jié)點(diǎn) 并且 父節(jié)點(diǎn) < 右子結(jié)點(diǎn)

構(gòu)建大根堆只是思想構(gòu)建,不是實(shí)際構(gòu)建,實(shí)際還是數(shù)組
先把數(shù)組構(gòu)建成大根堆,大根堆不一定是有序的,但一定是符合大根堆的規(guī)律,父結(jié)點(diǎn)一定比子結(jié)點(diǎn)大,全部構(gòu)建好(構(gòu)建大根堆,一定要從下向上構(gòu)建,如果無(wú)序直接從上向下構(gòu)建,有的會(huì)不符合大根堆定義)

默認(rèn)葉子結(jié)點(diǎn)為排好序的堆(葉子結(jié)點(diǎn)沒(méi)有子結(jié)點(diǎn),只有一層,符合大跟堆得特征) 先添加非葉子結(jié)點(diǎn),逐步向上添加 如果從上到下結(jié)點(diǎn)添加,葉子結(jié)點(diǎn)為有序堆,上到下添加會(huì)把有序堆打散,無(wú)法完成堆排序 完全二叉樹的特點(diǎn),n個(gè)結(jié)點(diǎn),最后一個(gè)非葉子結(jié)點(diǎn)二叉樹為(n/2)下標(biāo)為(n/2-1),逐步向上添加

構(gòu)建好大根堆后,轉(zhuǎn)換成小根堆

轉(zhuǎn)換小根堆的步驟,先把大根堆最大的(也就是堆頂)與最后面的結(jié)點(diǎn)換位置,這樣能保證最大的在最后面,也就是說(shuō),數(shù)組第一位與最后一位交換
交換完,小的就到了最上面,把剛交換完最大的固定不動(dòng),其他的重新構(gòu)建大根堆
此時(shí)最大的在最后面,其他的仍然是大根堆

第二次的時(shí)候,把當(dāng)前大根堆最大的值(當(dāng)前堆頂)與倒數(shù)第二位交換(倒數(shù)第一位是剛才的堆頂,最大的,已經(jīng)固定了,保持不變),最小的又到了堆頂,繼續(xù)重建大根堆
如此往復(fù),大根堆就變成了小根堆,此時(shí)的小根堆就是有序的

#include <iostream> #include <vector>using namespace std;void heapSort(vector<int> &num);void heapBuild(vector<int> &num, int fatherIndex, int len);int main() {int n; //n為將要輸入的數(shù)組長(zhǎng)度cin >> n; //輸入n cin方法需要上面使用stdvector<int> num; //定義vector 記得上面導(dǎo)入vectorint temp; //temp為輸入vector時(shí)的中間變量for (int i = 0; i < n; i++) {cin >> temp; //輸入num.push_back(temp);}heapSort(num); //調(diào)用自定義的排序方法cout << "\n\n排序后" << endl;for (int i = 0; i < num.size(); i++) {cout << num[i] << " "; //輸出}return 0; }void heapSort(vector<int> &num) {//構(gòu)建大根堆for (int i = num.size() / 2 - 1; i >= 0; i--) { // 倒數(shù)第二排開始, 創(chuàng)建大頂堆,必須從下往上比較heapBuild(num, i, num.size()); // 否則有的不符合大頂堆定義}cout << "構(gòu)建完大根堆后的數(shù)組\n";for (int i = 0; i < num.size(); i++) {cout << num[i] << " ";}int len = num.size();//也算一種選擇排序,因?yàn)槊看伟汛蟾诺阶詈缶蜕倥判蛞粋€(gè)while (len > 1) {//每次都把大根與最后面的值交換,int temp = num[0];num[0] = num[len - 1];num[len - 1] = temp;len--; //最后一個(gè)元素也就是剛才的大根已經(jīng)確定好了,可以少排序一個(gè)元素heapBuild(num, 0, len); //除去確定好的大根,把剩下的元素重新構(gòu)建cout << "\n下標(biāo):"<< len << " 值:" << num[len] <<" 確定好位置了\n";for (int i = 0; i < num.size(); i++) {cout << num[i] << " ";}} }void heapBuild(vector<int> &num, int fatherIndex, int len) {//堆(完全二叉樹)左子結(jié)點(diǎn)和右子結(jié)點(diǎn)與父結(jié)點(diǎn)的關(guān)系int left = fatherIndex * 2 + 1;int right = fatherIndex * 2 + 2;while (left < len) {int largestIndex; //largestIndex保存的是當(dāng)前子結(jié)點(diǎn)與父結(jié)點(diǎn)中最大的索引if (num[left] < num[right] && right < len) {largestIndex = right;} else {largestIndex = left;}if (num[largestIndex] < num[fatherIndex]) { //如果父節(jié)點(diǎn)大于子結(jié)點(diǎn),當(dāng)前符合大根堆,退出即可largestIndex = fatherIndex;break;}//不符合大根堆就交換int temp = num[largestIndex];num[largestIndex] = num[fatherIndex];num[fatherIndex] = temp;//接著去下面構(gòu)建大根堆fatherIndex = largestIndex;left = fatherIndex * 2 + 1;right = fatherIndex * 2 + 2;} }

總結(jié)

以上是生活随笔為你收集整理的22计算机408考研—数据结构—排序(详解加例题)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

激情综合色综合久久综合 | 国产精品99久久久久久武松影视 | 黄色软件在线观看 | 成人在线免费视频 | 亚洲干| 久草视频免费在线播放 | av一级片在线观看 | 夜夜操网站 | www久 | 午夜少妇 | 国产裸体无遮挡 | 日本精品视频免费 | 国产欧美精品一区二区三区 | 97在线精品视频 | av免费电影在线 | 久久无码av一区二区三区电影网 | 久久久久这里只有精品 | 色天天天 | 久草91视频 | 伊人婷婷色 | 亚洲精品视频观看 | 欧美精品v国产精品v日韩精品 | 久久久网站 | 国产小视频国产精品 | 精品久久精品久久 | 免费亚洲视频 | av三级在线播放 | 91中文字幕在线观看 | 337p欧美 | 天堂av在线 | 中文字幕av免费观看 | 日韩成人免费电影 | 在线视频福利 | 五月婷色| 国模一区二区三区四区 | 丁香久久激情 | 精品久久久久一区二区国产 | 国产高清中文字幕 | 国产99在线| 免费在线精品视频 | 六月天综合网 | 日韩精品中文字幕av | 亚洲日韩欧美视频 | 日日插日日干 | wwwwwww黄| 欧美久久久一区二区三区 | 麻豆久久久 | 伊人网综合在线观看 | 天天色天天射天天综合网 | 国产日韩欧美视频 | 超级碰碰碰碰 | 99热国产在线 | 成人欧美日韩国产 | 五月天六月丁香 | 在线观看视频在线观看 | 久精品视频免费观看2 | 六月丁香激情网 | 深夜国产在线 | 国产又粗又猛又色又黄网站 | 精品国产一区二区三区四区vr | av免费看在线 | 日日夜av| 天天射天天射 | 麻豆国产精品永久免费视频 | 日韩高清毛片 | 天天爽天天做 | 91桃色国产在线播放 | 中文免费 | 欧美精品国产综合久久 | 国产福利一区二区三区视频 | 人人看黄色| 成人小视频在线观看免费 | 国产又粗又猛又黄又爽的视频 | 日本少妇视频 | 免费福利在线播放 | 日韩乱色精品一区二区 | av最新资源 | 91亚色视频| 国产午夜不卡 | 99产精品成人啪免费网站 | 91漂亮少妇露脸在线播放 | 免费在线观看av网站 | 日本韩国精品一区二区在线观看 | 视频国产精品 | 亚洲欧美综合精品久久成人 | 亚洲乱码国产乱码精品天美传媒 | 国产精品视频久久久 | av在线网站大全 | 91成熟丰满女人少妇 | 亚洲精品动漫成人3d无尽在线 | 亚洲电影图片小说 | 日韩黄色影院 | 九九九九精品九九九九 | 日本精品久久久久 | 深爱婷婷| 日韩电影黄色 | 色狠狠一区二区 | 玖玖在线观看视频 | 亚州欧美精品 | 麻豆网站免费观看 | 91免费版在线| 亚洲国产中文在线观看 | av片一区| 国产精品美乳一区二区免费 | 麻豆视频在线免费 | 久久国产精品精品国产色婷婷 | 久草综合视频 | 99精品欧美一区二区 | 91精品老司机久久一区啪 | 在线国产99 | 97视频免费观看 | а天堂中文最新一区二区三区 | 国产精品欧美久久久久久 | 成人av影视 | 天天综合网在线 | 99热这里精品 | 国产在线不卡一区 | 中文字幕在线观看一区二区 | 人成免费网站 | 久久99热这里只有精品 | 97偷拍在线视频 | 97碰碰视频| 免费97视频 | 一区二区影院 | 天天天在线综合网 | 国产午夜在线 | 久久精品国亚洲 | 一区二区三区 中文字幕 | 天天摸夜夜添 | 有码中文在线 | 欧美久久成人 | 中文字幕国语官网在线视频 | 丝袜美腿在线 | 在线日韩一区 | 国产精品永久在线 | 国产黄在线看 | 一本一道久久a久久精品 | 狠狠色狠狠色合久久伊人 | 一区二区视频在线免费观看 | 久草精品资源 | 国产精品久久久久免费 | 国产日韩精品欧美 | 欧美性大战久久久久 | 四虎影视精品永久在线观看 | 国产视频资源在线观看 | 欧美一区三区四区 | 国产资源网站 | 狠狠狠狠狠狠天天爱 | 超碰在线公开免费 | 久久国产片 | 六月激情丁香 | 国产中文字幕在线 | 国产日韩欧美在线 | 久久午夜精品 | 五月婷婷在线观看 | 男女视频国产 | 中文在线a√在线 | 91中文在线视频 | 狠狠躁日日躁狂躁夜夜躁 | 99热只有精品在线观看 | 中文字幕精品一区二区精品 | bbw av| 久久中文字幕导航 | 久久精选视频 | 国产一区免费观看 | 久久er99热精品一区二区三区 | 亚洲精品字幕在线观看 | 久久亚洲区 | 一区二区视频在线免费观看 | 欧美特一级 | 91精品国产福利在线观看 | 成年人在线看视频 | av在线播放中文字幕 | 激情网色 | 91精品久久香蕉国产线看观看 | 亚洲免费一级电影 | 日韩精品中文字幕在线播放 | 福利一区在线 | 日韩丝袜视频 | 国产日女人 | 国产精品手机看片 | 国产大尺度视频 | 久久黄色a级片 | 4438全国亚洲精品在线观看视频 | 国产精品18久久久 | 69视频网站 | 久草线| 97免费在线视频 | 日本最新高清不卡中文字幕 | 二区三区在线视频 | 精品一区91 | 黄色在线观看免费网站 | 亚洲激情网站免费观看 | 亚洲欧洲日韩 | 免费看的毛片 | 色偷偷88888欧美精品久久久 | 国产成人精品亚洲a | 97超碰.com | 日韩a在线看 | 日韩a在线 | 久艹视频在线免费观看 | 亚洲欧洲日韩在线观看 | 久久怡红院 | 欧美一级xxxx | 久久久99精品免费观看乱色 | 国产日韩欧美在线一区 | 91精品人成在线观看 | 日韩一区二区三区在线观看 | 亚洲精品国偷自产在线91正片 | 最新日本中文字幕 | 人人爽人人看 | 色欧美成人精品a∨在线观看 | 免费在线成人av | 五月天综合激情网 | 在线观看国产日韩欧美 | 欧美日韩视频在线观看免费 | 亚洲韩国一区二区三区 | 91av视频导航| 婷婷 综合 色 | 天天操天天操天天操天天操天天操天天操 | 永久黄网站色视频免费观看w | 超碰97在线人人 | 国产黄在线免费观看 | 成人免费精品 | 西西大胆免费视频 | 日韩一区二区在线免费观看 | 日韩精品中文字幕在线观看 | 免费a v视频 | 国产91综合一区在线观看 | 91欧美日韩国产 | 亚洲国产精品人久久电影 | 日日夜夜天天 | 91日韩精品一区 | 日韩中文久久 | 日韩丝袜 | 久久精品精品 | 婷婷在线免费观看 | 国产精品青草综合久久久久99 | 色婷婷视频在线 | 亚洲激情影院 | 伊人电影在线观看 | 婷婷久久一区二区三区 | 国产精品美女久久久久久久网站 | 天天色.com | 色婷婷国产精品 | 欧美色图一区 | 中国精品一区二区 | 在线视频观看你懂的 | 99免费视频| 日韩一区二区三区在线观看 | 狠狠狠色狠狠色综合 | 国产精品久久久久久久久免费 | av成人免费网站 | 国产一级二级视频 | 天天想夜夜操 | 97国产大学生情侣酒店的特点 | 操操日日| 91精品国产99久久久久久红楼 | 毛片激情永久免费 | 日韩欧美视频在线观看免费 | 91精品国产91热久久久做人人 | 色婷婷福利视频 | 天天干天天色2020 | 97在线观看 | 久久91久久久久麻豆精品 | 欧美日韩xxxxx | 亚洲综合色视频在线观看 | 婷婷丁香七月 | 日韩资源在线 | 日本婷婷色 | 欧美精品网站 | 在线视频区 | 国产 一区二区三区 在线 | 亚洲aⅴ免费在线观看 | 亚洲国产字幕 | 国产精品k频道 | 天天操天天添天天吹 | 手机av在线网站 | 精品日本视频 | 日日夜夜天天久久 | 久草爱| 色爽网站 | 六月色丁 | 99精品视频免费观看视频 | 国产日韩欧美网站 | 国产成人三级 | 99re久久资源最新地址 | 大胆欧美gogo免费视频一二区 | 99热 精品在线 | 亚洲精品久久久蜜桃直播 | 欧美小视频在线观看 | 久久久国产99久久国产一 | 国产999精品久久久久久 | 亚洲国产精品激情在线观看 | 一区二区精品在线 | 欧美另类美少妇69xxxx | 麻豆激情电影 | 黄色三级免费看 | 免费在线观看日韩欧美 | 国产视频在线免费观看 | 9久久精品 | 免费高清在线观看成人 | 99热精品国产 | 99精品久久久久久久久久综合 | 在线激情电影 | 成年美女黄网站色大片免费看 | 久久久国产影院 | 日韩电影精品 | 欧美 日韩 久久 | 精品网站999www| 91在线观看视频 | 狠狠色丁香婷婷综合 | 国产高清免费在线观看 | 欧美黑吊大战白妞欧美 | 91av在线视频免费观看 | 欧美亚洲一区二区在线 | 国产成人一区二区在线观看 | 在线亚洲天堂网 | 亚洲国产手机在线 | 亚洲精品高清视频 | 日韩精品中文字幕在线 | 久久综合毛片 | 黄色毛片在线看 | 在线播放国产一区二区三区 | 日韩欧美精品在线 | 日韩久久精品一区二区三区下载 | 超碰在线97免费 | 久久99久久99精品 | 91在线视频精品 | 精品一区二区免费在线观看 | 欧美一区二区视频97 | 欧美一区二区三区在线视频观看 | 亚洲国产视频在线 | 欧美久久久久久久久久久 | 美女久久久久久久 | 日av免费 | 亚洲成人精品 | 婷婷视频在线观看 | 午夜电影 电影 | 国产1区2区3区精品美女 | 在线看中文字幕 | 一区二区三区不卡在线 | 国产精品高清在线观看 | 国产91精品一区二区 | 欧美特一级 | 亚洲欧美国产精品久久久久 | 丁香婷婷基地 | 精品在线观看一区二区 | 国产精品毛片久久 | 成人久久视频 | 国内精品美女在线观看 | 99热亚洲精品 | 色的网站在线观看 | 久久久久久久久久久网站 | 黄色软件大全网站 | 成人动漫一区二区三区 | 欧美成人亚洲 | 久草视频视频在线播放 | 日韩在线电影一区 | 成片视频免费观看 | 伊人狠狠色丁香婷婷综合 | 99精品欧美一区二区蜜桃免费 | 国产自产高清不卡 | 久久精品99久久 | 男女视频国产 | 免费在线观看av的网站 | av成人免费网站 | 久久综合色影院 | 最近中文字幕大全中文字幕免费 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | a在线视频v视频 | 91九色丨porny丨丰满6 | 久久国产露脸精品国产 | 国产日产精品一区二区三区四区的观看方式 | 成人av观看 | 婷婷.com| 在线高清一区 | 成人在线视频免费看 | 麻豆影视网站 | 五月婷婷六月综合 | 天天色天天操天天爽 | 中文字幕一区二区三区四区在线视频 | 亚洲精选99 | 国产原创av在线 | 久久久精选 | 月下香电影 | 日本久久久精品视频 | 久久99国产精品免费网站 | 日韩精品一区电影 | 国产成人av电影在线观看 | 特级西西444www大胆高清无视频 | 国产直播av| 99亚洲精品 | 亚洲精品国偷拍自产在线观看蜜桃 | 亚洲作爱| 国产精品毛片久久久久久久久久99999999 | 成人午夜电影久久影院 | 日韩高清av | 日韩在线观看中文 | 日韩欧美电影 | 久久国产精品视频观看 | 国产一卡二卡在线 | 探花视频网站 | 狠色在线| 亚洲va在线va天堂 | 一区二区三区四区五区在线 | 国产成人99久久亚洲综合精品 | 久久婷亚洲五月一区天天躁 | 99精品影视| 精品中文字幕在线播放 | 狠狠躁日日躁狂躁夜夜躁 | 久久超碰网 | 在线看片91 | 成年人精品 | 国产一区二区免费在线观看 | 91av99| 国产亚洲一级高清 | 欧美午夜剧场 | 免费观看一级 | a级片久久久 | 五月婷婷在线视频观看 | 国产高清不卡一区二区三区 | 日韩在线观看影院 | 黄网站app在线观看免费视频 | 免费精品在线 | 久久成人18免费网站 | 午夜精品福利一区二区 | 91视频麻豆视频 | 性日韩欧美在线视频 | 国产亚洲视频在线观看 | 国产视频69 | 精品欧美小视频在线观看 | 色多视频在线观看 | 亚洲高清激情 | 91麻豆网站 | 成人av影院在线观看 | 中文字幕亚洲精品日韩 | 色在线视频 | 天天色播 | 黄色的视频网站 | 久久高清免费观看 | 欧美专区日韩专区 | 99久久国产免费,99久久国产免费大片 | 一区二区不卡在线观看 | 伊人网站 | 国产精品第2页 | www.在线观看视频 | 97人人模人人爽人人喊网 | 免费观看国产视频 | 久久久国产99久久国产一 | 夜夜干天天操 | 亚洲在线免费视频 | 99久久久国产精品免费观看 | 中文字幕在线视频免费播放 | www.夜夜爱 | 亚洲最新在线 | 九九久久在线看 | 国产一区二区三区免费在线观看 | 1024在线看片| 婷婷丁香视频 | 久久国产精品影视 | 国产日本高清 | 国产精品女人久久久久久 | 九九久久久久久久久激情 | www.福利视频 | 亚洲欧美精品在线 | 4hu视频| 麻豆av一区二区三区在线观看 | 在线观看 国产 | 久久精品aaa | 亚州av免费 | 日韩久久激情 | 日韩电影中文字幕在线观看 | 亚洲影院国产 | 国产精品手机视频 | 在线观看91 | 午夜精品一区二区三区免费视频 | 黄色大片免费播放 | 91成人小视频 | 麻豆传媒视频在线播放 | 久久久久网址 | 黄色大片av | 在线免费观看av网站 | 亚洲精品高清一区二区三区四区 | 一区二区三区视频在线 | 又黄又爽的视频在线观看网站 | 欧美久久久久久久久久久久 | 国产精品久久久久久五月尺 | 二区三区视频 | 在线不卡a | 欧美电影黄色 | 久久久精品在线观看 | 五月婷婷在线视频观看 | 色婷婷综合久久久久 | 毛片888 | 99在线视频免费观看 | 日日干av | 97精品久久 | 黄色在线网站噜噜噜 | 精品视频中文字幕 | 亚洲九九九在线观看 | 狠狠色噜噜狠狠狠狠2021天天 | 最近中文字幕完整高清 | 在线免费看黄色 | 人人舔人人射 | 亚洲每日更新 | 国产黄色片免费观看 | 深爱婷婷网 | 精品国产资源 | 国产在线精品区 | 国产高清网站 | 9ⅰ精品久久久久久久久中文字幕 | 久久精品成人热国产成 | 国产视频中文字幕在线观看 | 婷婷伊人网 | 久久久久高清 | 免费的黄色的网站 | 色激情五月 | 最近2019中文免费高清视频观看www99 | 国产 日韩 中文字幕 | 91成人短视频在线观看 | 日韩,精品电影 | 中文字幕在线一区二区三区 | 黄色片网站免费 | 国产99久久久国产精品免费看 | 中文字幕在线有码 | 国产成人精品电影久久久 | 一级成人网 | 2018亚洲男人天堂 | 99欧美| 亚洲国产网站 | 精品免费久久久久久 | 99在线观看| 中文字幕观看视频 | 伊人射| 国产日韩欧美在线影视 | 日本黄区免费视频观看 | 亚洲午夜精品一区 | 天堂网在线视频 | 日韩精品久久久久久久电影99爱 | 久久999精品 | 99精品视频在线观看视频 | 久久精品亚洲精品国产欧美 | 免费精品久久久 | 国内三级在线 | 久久久久久久久久久电影 | 欧美一级日韩三级 | 久久理论片 | 国产日韩精品久久 | 久久www免费视频 | 国语精品久久 | 欧美电影在线观看 | 在线影院av | 97人人超碰在线 | 蜜臀av性久久久久蜜臀av | 亚洲一二三区精品 | 国产精品 日韩精品 | 最近中文字幕在线中文高清版 | 欧美一级黄色视屏 | 日韩精品久久久久久 | 免费日韩视 | 国产精品一区二区在线免费观看 | 成年人黄色在线观看 | 91成人欧美 | 特级毛片在线 | 天天操天天干天天玩 | 综合天天久久 | 色噜噜日韩精品一区二区三区视频 | 五月激情在线 | 丁香婷婷电影 | 久久天天躁夜夜躁狠狠躁2022 | 99精品免费在线 | 国产精品扒开做爽爽的视频 | 欧美美女视频在线观看 | 九九九视频精品 | 精品一区二区电影 | 日韩成人黄色 | 久99久在线 | 99视频在线精品免费观看2 | 99精品热 | 九九久久久 | 99久久精品费精品 | 成年人黄色av| 天天曰夜夜操 | 国产一区欧美一区 | 亚洲国产精品va在线看黑人 | 一级a毛片高清视频 | 久久高清免费视频 | 国产精品av免费 | 99电影456麻豆 | 欧美激情视频一区二区三区免费 | 日韩久久精品一区二区三区下载 | 日韩a级黄色 | 国产精品青草综合久久久久99 | 人人干天天干 | 日韩a级黄色片 | 波多野结衣亚洲一区二区 | www日韩视频 | 国产亚洲欧美精品久久久久久 | 色综合久久88色综合天天 | 国产香蕉久久 | 在线观看免费av网 | 久久伊人免费视频 | 在线看片91 | 久久99久国产精品黄毛片入口 | 国产精品www | 久久久久久久久电影 | 天天色天天射综合网 | 久久影视一区 | 国产免费国产 | 又黄又刺激视频 | 亚洲最大在线视频 | 国产一级在线视频 | 成人动漫一区二区三区 | av久久在线 | 免费看日韩 | 欧美 亚洲 另类 激情 另类 | 国产精品免费久久久久久 | www国产亚洲精品久久网站 | h文在线观看免费 | 国产精品免费久久久久影院仙踪林 | 在线不卡中文字幕播放 | 香蕉久久国产 | 成人午夜影视 | 综合久久久 | 欧美孕妇与黑人孕交 | 一区二区三区在线视频111 | 久久伊人婷婷 | 亚洲精选在线观看 | av福利免费 | 日韩中文字幕视频在线 | 中文字幕在线视频免费播放 | 中文字幕一区二区三区乱码不卡 | 久久天天躁狠狠躁夜夜不卡公司 | 一级特黄aaa大片在线观看 | 国产精品一区二区精品视频免费看 | www.com黄 | 国产日韩视频在线观看 | 日本精品久久久久影院 | 国产成人在线免费观看 | 中文字幕av专区 | 久久久久久看片 | 成人av电影在线播放 | 欧美极品xxxx| 天天摸天天舔 | 国产亚洲精品女人久久久久久 | 中文字幕影片免费在线观看 | 很黄很色很污的网站 | 国产不卡毛片 | 日日射天天射 | 日本久热| 97香蕉超级碰碰久久免费软件 | 久久免费视频99 | 国产成免费视频 | 精品中文字幕在线 | 99超碰在线播放 | 亚洲欧美日韩精品久久奇米一区 | 免费观看性生交 | 亚洲无毛专区 | 成人动漫一区二区三区 | 天天爱天天操天天射 | 99久久精品国产网站 | 国产精品久久久久毛片大屁完整版 | 日韩亚洲在线观看 | 成人影片在线播放 | 日本资源中文字幕在线 | 亚洲精品视频在线观看视频 | 亚洲精品啊啊啊 | 久久99亚洲精品久久 | 有码中文在线 | 日韩亚洲国产中文字幕 | 久草精品视频在线看网站免费 | 国产色综合 | 经典三级一区 | 久久精品激情 | 国产精品18久久久久久vr | 四虎国产精品成人免费影视 | 黄色三级免费看 | 国产美女视频网站 | 日批视频在线 | 免费激情在线电影 | 国产91在线播放 | 国产精品18久久久久久久 | 亚洲国产99 | 婷婷国产v亚洲v欧美久久 | 综合在线观看 | 97视频播放 | 免费a v观看| 亚洲黄色免费观看 | 欧美日韩不卡一区 | 日韩精品欧美视频 | 91麻豆精品国产自产在线游戏 | 国产成人一区二区三区在线观看 | 亚洲va在线va天堂va偷拍 | 久久免费播放视频 | av免费看电影 | 欧美精品中文字幕亚洲专区 | 嫩草伊人久久精品少妇av | 99色视频| 久草在线在线 | 欧美久久久一区二区三区 | 精品国产一区二区三区久久久久久 | 精品 激情| 国产成人精品一区二区 | 天天操天天吃 | 97超碰人人澡| 免费日韩三级 | www色片| 91久草视频 | 国产色在线,com | 国产在线日韩 | 精品美女久久 | 一级黄色电影网站 | 久草在线观看 | 日韩av中文字幕在线免费观看 | 日本中文字幕系列 | 91黄色影视| 国产精品手机看片 | 国产视频精品免费播放 | 日韩av电影免费在线观看 | 亚洲精品一区二区三区在线观看 | 最近日本韩国中文字幕 | 中文字幕丝袜美腿 | 国产在线观看一区 | 69精品在线观看 | 国产97在线看 | 日韩电影在线观看一区二区三区 | 国产精品久久久久久久久久久久午 | 亚洲国产精品女人久久久 | 狠狠干免费 | 欧日韩在线视频 | japanesefreesexvideo高潮 | 国产玖玖在线 | 国产精品一区二区三区久久久 | 亚洲黄色小说网址 | 日韩精品视 | 日日碰狠狠添天天爽超碰97久久 | 国产伦精品一区二区三区免费 | 国产在线一区二区三区播放 | 日本午夜免费福利视频 | 国产精品永久免费在线 | adn—256中文在线观看 | 国产欧美最新羞羞视频在线观看 | 国产精品美女久久久久久网站 | 国内精品免费 | 手机av永久免费 | 国产资源站 | 国产中文字幕视频在线观看 | 2021国产在线视频 | 91午夜精品 | 亚洲片在线资源 | 色国产精品| 亚洲精品一区二区三区高潮 | 久久精品亚洲 | 亚洲综合视频在线 | 丁香花在线视频观看免费 | 欧美国产三区 | 亚洲成人av电影 | 久久成年人视频 | 在线国产精品视频 | 色天天综合久久久久综合片 | 波多野结衣亚洲一区二区 | 久久香蕉电影网 | 丁香花在线视频观看免费 | 激情影音 | 免费三级影片 | 久久婷婷五月综合色丁香 | 国产a级片免费观看 | 国产一区免费看 | 美女视频黄免费的 | 国产高清一区二区 | 亚洲最大激情中文字幕 | 人人狠狠| 91网址在线看 | 又大又硬又黄又爽视频在线观看 | 欧美精品久久久久久久久久丰满 | 99精品视频在线观看视频 | 欧美韩国在线 | 色在线中文字幕 | 色婷婷啪啪免费在线电影观看 | 日产中文字幕 | 中文字幕免费观看全部电影 | 国产亚洲精品女人久久久久久 | av免费试看 | 国产精品99在线播放 | 成人在线免费看视频 | 99在线视频精品 | 3d黄动漫免费看 | 不卡的av电影在线观看 | av中文资源在线 | a√天堂资源 | 少妇性色午夜淫片aaaze | 久草在线高清视频 | 国产中文字幕视频在线观看 | 伊人视频| 97在线观看视频国产 | 粉嫩av一区二区三区入口 | 91av资源网 | 久久国产精品系列 | 日韩av在线一区二区 | 久久精品一二三 | 人人爽人人做 | 亚洲精品国产拍在线 | 五月丁婷婷 | 99九九99九九九视频精品 | 精品在线一区二区 | 国产精品久久久久久久电影 | 午夜精品久久久久久久99热影院 | 美国av大片 | 色久天 | 精品国产a| 久草剧场 | 久久久五月婷婷 | 狠狠色网 | 色婷五月天 | 永久免费看av | 中文字幕日韩av | 欧美一区二区三区免费观看 | 在线观看免费版高清版 | 在线播放日韩av | 在线免费黄色毛片 | 日韩久久电影 | 狠狠色丁香婷婷综合橹88 | 免费av在| 亚洲人成在线观看 | bbbbb女女女女女bbbbb国产 | 成年美女黄网站色大片免费看 | 日本不卡视频 | 婷婷丁香在线视频 | 国产黄色片在线免费观看 | 日韩欧美在线国产 | 国产黄色免费电影 | 色综合咪咪久久网 | 成人av高清在线观看 | 91夫妻自拍| 狠狠干干| 午夜色影院 | av成人在线播放 | 亚洲乱码中文字幕综合 | 肉色欧美久久久久久久免费看 | 久草免费福利在线观看 | 国产精品久久久久久电影 | 精品国产大片 | 国产九九热视频 | 国内成人综合 | av三级av | 国产91精品一区二区 | 视频在线在亚洲 | 麻豆免费观看视频 | 日韩成人精品 | 国产午夜麻豆影院在线观看 | 久久免费视频在线观看 | 又黄又爽又无遮挡的视频 | 毛片99 | 亚洲高清视频在线 | 毛片无卡免费无播放器 | 综合视频在线 | 日本性xxxxx 亚洲精品午夜久久久 | 91九色视频观看 | 国产成人61精品免费看片 | 国产亚洲精品久久久久久电影 | 美女黄频免费 | 国产精品网站一区二区三区 | 9999免费视频 | 国产在线观看你懂得 | www.狠狠插.com | 日韩 精品 一区 国产 麻豆 | 午夜丰满寂寞少妇精品 | 久久久久国产免费免费 | 91少妇精拍在线播放 | 久久久一本精品99久久精品66 | 日韩视频免费 | 亚洲精品国精品久久99热 | 一区二区三区精品在线视频 | 麻豆视频免费入口 | av超碰免费在线 | 激情综合色图 | 欧美国产91| 久久久久久看片 | 欧美aⅴ在线观看 | 国产精品黑丝在线观看 | 色偷偷88欧美精品久久久 | 日韩不卡高清 | 国产高清视频在线播放 | 国产特级毛片aaaaaa | 亚洲精品视频在线观看免费 | 成人黄色大片在线观看 | 国产高清不卡一区二区三区 | 亚洲午夜精品在线观看 | 免费亚洲精品视频 | 久久乐九色婷婷综合色狠狠182 | 欧美激精品 | 99久久精品久久久久久动态片 | 婷婷久久精品 | 黄色av播放 | 最新av在线免费观看 | 亚洲乱码一区 | 91视频首页| 精产嫩模国品一二三区 | 精品999| 日本韩国精品在线 | 黄网站免费大全入口 | 天天射天天干 | 久久超碰免费 | 深夜免费福利网站 | 久久99精品热在线观看 | 久久99电影 | 在线观看亚洲a | 久久综合电影 | 美女视频黄是免费的 | 免费av网站在线看 | 久久免费观看少妇a级毛片 久久久久成人免费 | 日韩电影在线观看一区 | 亚洲专区视频在线观看 | 日韩精品一区二区三区中文字幕 | 亚洲国产精品成人va在线观看 | 色婷婷精品大在线视频 | 久久玖 | 成人羞羞视频在线观看免费 | 一区二区三区在线观看中文字幕 | 成年人黄色免费视频 | 久99视频| 成人黄色一级视频 | 国产精品免费久久久久影院仙踪林 | 亚洲成人高清在线 | 婷婷在线网 | 色综合天天色 | av免费电影网站 | 日本精油按摩3 | 欧美激情视频在线免费观看 | 欧美激情精品久久久久 | 色狠狠狠| 午夜精品福利一区二区三区蜜桃 | 91最新国产 | 中文字幕亚洲五码 | 91精品国产一区二区三区 | 久久国产经典视频 | 九九精品视频在线看 | 97高清视频 | 久久爽久久爽久久av东京爽 | 国产在线最新 | 国产999视频 | 久久黄色网| 亚洲精品在线一区二区 | 国产欧美精品xxxx另类 | 日韩网| 亚洲日日夜夜 | 黄色成人91 | 色wwww| 欧美激情片在线观看 | 91色偷偷| 91在线视频观看 | 国产视频在线看 | 亚洲天堂精品视频在线观看 | 国产精品免费观看在线 | 成全在线视频免费观看 | 黄色大全免费网站 | 成x99人av在线www | 色综合久久综合网 | 亚洲精品国产拍在线 | 96超碰在线 | 高潮久久久久久 | 五月天中文字幕mv在线 | 国产亚洲精品av | 国产精品美女免费看 | 麻豆视频在线免费 | 99热超碰在线 | 五月婷婷在线观看视频 | 久草在线视频精品 | 中午字幕在线 | 一区二区三区日韩视频在线观看 | 午夜色影院 | 五月天国产 | 欧美不卡在线 | av三级av| 亚洲精品美女视频 | 麻豆小视频在线观看 | 日韩av成人免费看 | 五月综合色 | 黄色一级片视频 | 久久久国产精品人人片99精片欧美一 | 久久久免费看视频 | 午夜av免费观看 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 国产亚洲精品电影 | 91亚洲精品久久久蜜桃借种 | 国产成人精品一区二区在线观看 | 中文网丁香综合网 | 中文字幕在线人 | 在线观看香蕉视频 | 十八岁免进欧美 | 97在线精品视频 | 天天综合网~永久入口 | 国产香蕉97碰碰碰视频在线观看 | 国产又粗又猛又黄又爽 | 欧美激情片在线观看 | 免费日p视频 | 免费看污片 |