<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                根據維基百科的定義: 插入排序是迭代算法,逐一獲得輸入數據,逐步產生有序的輸出序列。每步迭代中,算法從輸入序列中取出一元素,將之插入有序序列中正確的位置。如此迭代直到全部元素有序。 歸并排序進行如下迭代操作:首先將原始序列看成N個只包含1個元素的有序子序列,然后每次迭代歸并兩個相鄰的有序子序列,直到最后只剩下1個有序的序列。 現給定原始序列和由某排序算法產生的中間序列,請你判斷該算法究竟是哪種排序算法? 輸入格式: 輸入在第一行給出正整數N (<=100);隨后一行給出原始序列的N個整數;最后一行給出由某排序算法產生的中間序列。這里假設排序的目標序列是升序。數字間以空格分隔。 輸出格式: 首先在第1行中輸出“Insertion Sort”表示插入排序、或“Merge Sort”表示歸并排序;然后在第2行中輸出用該排序算法再迭代一輪的結果序列。題目保證每組測試的結果是唯一的。數字間以空格分隔,且行末不得有多余空格。 輸入樣例1: 10 3 1 2 8 7 5 9 4 6 0 1 2 3 7 8 5 9 4 6 0 輸出樣例1: Insertion Sort 1 2 3 5 7 8 9 4 6 0 輸入樣例2: 10 3 1 2 8 7 5 9 4 0 6 1 3 2 8 5 7 4 9 0 6 輸出樣例2: Merge Sort 1 2 3 8 4 5 7 9 0 6 代碼如下: #include<stdio.h> #include<stdlib.h> void merge(int l, int r, int a[], int *tempa, int rightend) { int tem = l; int leftend = r - 1; int elementnum = rightend - l + 1; int i; while (l <= leftend&&r <= rightend) { if (a[l] <a[r]) { tempa[tem++] = a[l++]; } else { tempa[tem++] = a[r++]; } } while (l <= leftend) { tempa[tem++] = a[l++]; } while (r <= rightend) { tempa[tem++] = a[r++]; } for (i = 0; i < elementnum; i++, rightend--){ a[rightend] = tempa[rightend]; } } void mergepass(int tempa[], int a[], int n, int length) { int i,j; for (i = 0; i <= n - 2 * length; i += 2 * length) { merge(i, i + length, a, tempa, i + 2 * length - 1); } if (i + length < n) { merge(i, i + length, a, tempa, n - 1); } else for (j = i; j < n; j++) { tempa[j] = a[j]; } } void merge_sort(int *a, int n) { int *tempa; int length = 1; int i; tempa = (int *)malloc(sizeof(int)*n); while (length < n) { mergepass(tempa, a, n, length); length *= 2; mergepass(a, tempa, n,length); length *= 2; } free(tempa); } int main() { int a[105],ai[105],ag[105],n,temp,i,j,k,count,flag=0; scanf("%d", &n); for (i = 0; i < n; i++) { scanf("%d", a + i); ag[i] = a[i]; } for (i = 0; i < n; i++) { scanf("%d", ai + i); } /*一般來說,插入排序都采用in-place在數組上實現。具體算法描述如下: ⒈ 從第一個元素開始,該元素可以認為已經被排序 ⒉ 取出下一個元素,在已經排序的元素序列中從后向前掃描 ⒊ 如果該元素(已排序)大于新元素,將該元素移到下一位置 ⒋ 重復步驟3,直到找到已排序的元素小于或者等于新元素的位置 ⒌ 將新元素插入到下一位置中 ⒍ 重復步驟2~5*/ for (i = 1; i < n; i++) { if (flag == 1) { flag++; } count = 0; temp = a[i]; j = i - 1; while (j >= 0 && a[j] >temp) { a[j+1] = a[j ]; j--; } if (j != i - 1) { a[j + 1] = temp; } if (flag == 2) { for (k = 0; k < n; k++) { if (k != n - 1) printf("%d ", a[k]); else printf("%d", a[k]); } return 0; } for (k = 0; k < n; k++) { if (a[k] == ai[k]&&flag!=2) { count++; } else break; } if (count == n) { flag = 1; printf("Insertion Sort\n"); } } /*歸并操作的工作原理如下: 第一步:申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合并后的序列 第二步:設定兩個指針,最初位置分別為兩個已經排序序列的起始位置 第三步:比較兩個指針所指向的元素,選擇相對小的元素放入到合并空間,并移動指針到下一位置 重復步驟3直到某一指針超出序列尾 將另一序列剩下的所有元素直接復制到合并序列尾*/ int tempa[105],length=1,countg=0; while (length < n) { if (flag == 1) { flag++; } countg = 0; mergepass(tempa, ag, n, length); if (flag == 2) { for (k = 0; k < n; k++){ if (k != n - 1) printf("%d ", ag[k]); else printf("%d", ag[k]); } return 0; } for (i = 0; i < n; i++) { if (ag[i] == ai[i]) { countg++; } } if (countg == n){ flag = 1; printf("Merge Sort\n"); } length *= 2; } return 0; }
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看