日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
MapReduce矩陣;及快排單鏈表之解答

今日面試題:

一個很大的2D矩陣,如果某點(diǎn)的值,由它周圍某些點(diǎn)的值決定,例如下一時刻(i,j) 的值取當(dāng)前時刻它的8鄰點(diǎn)的平均,那么怎么用MapReduce來實(shí)現(xiàn)。

快排單鏈表分析

題目:

快排(QuickSort)單向鏈表(Singly Linked List)。

分析:

思路和數(shù)據(jù)的快速排序一樣,都需要找到一個pivot元素、或者節(jié)點(diǎn)。然后將數(shù)組或者單向鏈表劃分為兩個部分,然后遞歸分別快排。

針對數(shù)組進(jìn)行快排的時候,交換交換不同位置的數(shù)值,在分而治之完成之后,數(shù)據(jù)就是排序好的。那么單向鏈表是什么樣的情況呢?除了交換節(jié)點(diǎn)值之外,是否有其他更好的方法呢?可以修改指針,不進(jìn)行數(shù)值交換。這可以獲取更高的效率。

在修改指針的過程中,會產(chǎn)生新的頭指針以及尾指針,要記錄下來。在partition之后,要將小于pivot的的部分、pivot、以及大于pivot的部分重新串起來成為一個singly linked list。

在partition時,我們用最后的節(jié)點(diǎn)作為pivot。當(dāng)我們掃描鏈表時,如果節(jié)點(diǎn)值大于pivot,將節(jié)點(diǎn)移到尾部之后;如果節(jié)點(diǎn)小于,保持不變。

在遞歸排序時,我們先調(diào)用partition將pivot放到正確的為止并返回pivot,然后,遞歸左邊,遞歸右邊,最后在合成一個單鏈表。

C++實(shí)現(xiàn):

 
 
 
  1. struct node *partition(struct node *head, struct node *end,  
  2.                       struct node **newHead, struct node **newEnd)
  3. {
  4.    struct node *pivot = end;
  5.    struct node *prev = NULL, *cur = head, *tail = pivot;
  6.    while(cur != pivot)
  7.    {
  8.        if(cur->data < pivot->data)
  9.        {
  10.           if((*newHead) == NULL)
  11.                (*newHead) = cur;
  12.            prev = cur;  
  13.            cur = cur->next;
  14.        }
  15.        else
  16.        {
  17.            if(prev)
  18.                prev->next = cur->next;
  19.            structnode *tmp = cur->next;
  20.            cur->next = NULL;
  21.            tail->next = cur;
  22.            tail = cur;
  23.            cur = tmp;
  24.        }
  25.    }
  26.    if((*newHead) == NULL)
  27.        (*newHead) = pivot;
  28.    (*newEnd) = tail;
  29.   return pivot;
  30. }
  31. struct node *quickSortRecur(struct node *head, struct node *end)
  32. {
  33.    if(!head || head == end)
  34.        return head;
  35.    node *newHead = NULL, *newEnd = NULL;
  36.   struct node *pivot = partition(head, end, &newHead, &newEnd);
  37.    if(newHead != pivot)
  38.    {
  39.       struct node *tmp = newHead;
  40.        while(tmp->next != pivot)
  41.            tmp = tmp->next;
  42.        tmp->next = NULL;
  43.        newHead = quickSortRecur(newHead, tmp);
  44.        tmp = getTail(newHead);
  45.        tmp->next =  pivot;
  46.    }
  47.    pivot->next = quickSortRecur(pivot->next, newEnd);
  48.    returnn ewHead;
  49. }
  50. void quickSort(struct node **headRef)
  51. {
  52.    (*headRef) = quickSortRecur(*headRef, getTail(*headRef));
  53.    return;
  54. }

網(wǎng)站名稱:MapReduce矩陣;及快排單鏈表之解答
URL分享:http://www.5511xx.com/article/cdicses.html