日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

杨氏矩阵的查找

發布時間:2025/3/13 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 杨氏矩阵的查找 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??

? ?? ? 在一個二維數組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。這道題是一道非常經典的題目,很多面試中都會遇到。但其實我們一拿到這個問題,可能都會想到那就直接找唄,我們把這樣一個二維數組遍歷一遍不是很快就找到了嗎,但這并不是面試官所想看到的,下面我們來分析分析。

?

? ? ?首先我們隨便拿一個滿足條件的二維數組,假設我們要查找6是否在數組中,我們可以發現,如果第一行的最大數字都比6小,我們就直接在下一行查找,同樣如果某一列的最小數都比6小,我們也就不用在比較這一列其他的數字了。

?

? ? ?首先選擇第一行的最大數也就是最右邊的5和6進行比較,發現是比6小的,那么我們就把第一行舍去轉而比較第二行的最大數8,發現是大于6的,所以,這一列其他元素肯定都大于6了,應該把這一列也舍去,以此類推。

?

? ? ??

?

? ? ??下面是我的查找代碼,對代碼進行了很多地方的修正,如果查找到要找的數字直接返回它的下標,而且還有一個問題,就是它求出了這個二位數組所有元素按從小到大的順序排列后,所要查找的數排在多少位。我在函數中取的二位數組比較簡單{1, 2, 3, 4, 5, 6, 7, 8, 9 }

?

1 #include<stdio.h> 2 #include<windows.h> 3 4 #define ROW 3 5 #define COL 3 6 7 typedef struct Ret //定義一個結構體類型,為了返回下標 8 { 9 int row; 10 int col; 11 }Ret; 12 13 Ret find_num(int arr[ROW][COL], int rows, int cols, int key) //查找函數 14 { 15 int row = 0; 16 int col = cols - 1; 17 Ret ret = { 0, 0 }; 18 19 while (row <= 2 && col >= 0) 20 { 21 if (arr[row][col] > key) //如果比要找的數大,則列減一 22 { 23 col--; 24 } 25 else if (arr[row][col] < key) //如果比要找的數小,則行加一 26 { 27 row++; 28 } 29 else 30 { 31 ret.row = row; 32 ret.col = col; 33 return ret; 34 } 35 } 36 ret.row = -1; //如果沒有找到,返回(-1,-1) 37 ret.col = -1; 38 return ret; 39 } 40 41 int* change(int arr[ROW][COL],int length ) //二位數組轉換成一位數組函數,length為二位數組的大小 42 { 43 int i = 0; 44 int *ma =(int *) malloc(length*sizeof(int)); //動態開辟了一個一位數組,也可以在函數外面初始化一個一位數組在這里調用 45 int row = 0, col = 0; 46 47 for (i = 0; i < length; i++) 48 { 49 ma[i] = arr[row][col]; 50 col++; 51 if (col>COL - 1) 52 { 53 row++; 54 col = 0; 55 } 56 } 57 return ma; 58 } 59 int sort(int* arr,int length,int key ) //排序函數 60 { 61 int x = 0,y = 0; 62 for (x = 0; x < length;x++) 63 { 64 for (y = x + 1; y < length; y++) 65 { 66 if (arr[x]>arr[y]) 67 { 68 int temp = arr[x]; 69 arr[x] = arr[y]; 70 arr[y] = temp; 71 } 72 if (arr[x] == key) 73 { 74 return x; 75 } 76 } 77 } 78 return -1; 79 } 80 81 82 int main() 83 { 84 int arr[ROW][COL] = { 1, 2, 3, 2, 3, 4, 3, 4, 5 }; 85 int length = sizeof(arr) / sizeof arr[0][0]; 86 int key = 2; 87 int* ma=NULL; 88 int n = 0; 89 Ret ret = find_num(arr,ROW, COL, key); 90 printf("%d在第%d行第%d列\n",key,ret.row+1,ret.col+1); 91 ma = change(arr, length); 92 n = sort(ma, length, key); 93 printf("%d按順序排列在第%d位\n", key, n+1); 94 95 system("pause"); 96 return 0; 97 }

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

轉載于:https://www.cnblogs.com/MrListening/p/5424812.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的杨氏矩阵的查找的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。