3排序

來源:互聯網
上載者:User

  這個是緊接著的下一道題.發現了,其實,隨著資料種類多起來,分塊也就多了,這也正是快速排序的來曆吧.還有呢,就是,隨著資料多起來,也就是會重複的情況下,也就會出現array[i] == array[j] == array[pivot]的時候,那樣我這段代碼的主迴圈也就無法運行了.於是,在median3 () 函數中先要將兩頭排好序, 以便在主迴圈中安全地使用首碼自增運算子.

  這本書裡的練習題感覺不錯,只是演算法分析的題做著比較吃力,相信隨著數學的學習,情況會好起來吧!

  貼上代碼,呵呵.

/*7-32-11-26-23.19.c -- 第七章第三十二題*/<br />#include <stdio.h></p><p>#define SIZE 22<br />#define FALSE 1<br />#define MAYBE 2<br />#define TRUE 3<br />#define PROBABLYFALSE 4<br />#define PROBABLYTRUE 5</p><p>int main (void) ;<br />void print_array (const int * const array, const int size) ;<br />void swap (int * const vala, int * const valb) ;</p><p>int main (void)<br />{<br />int array[SIZE] = {TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, MAYBE, MAYBE, MAYBE, MAYBE, FALSE, FALSE, FALSE, FALSE, FALSE, MAYBE, MAYBE, MAYBE, FALSE} ;<br />int i, j, size, index, probablyfalse, probablytrue ;</p><p>probablyfalse = PROBABLYFALSE ;<br />probablytrue = PROBABLYTRUE ;<br />size = SIZE ;<br />index = (size - 1) / 2 ;<br />i = 0 ;<br />j = size - 1 ;</p><p>print_array (array, size) ;<br />/*First step*/<br />swap (array + index, &probablytrue) ;<br />while (1)<br />{<br />while (FALSE == array[i] || MAYBE == array[i])<br />i++ ;<br />while (TRUE == array[j])<br />j-- ;<br />if (i < j)<br />swap (array + i, array + j) ;<br />else<br />break ;<br />}<br />swap (array + i, &probablytrue) ;<br />/*Second step*/<br />if (TRUE == array[i])<br />i -= 1 ;<br />index = i / 2 ;<br />j = i ;<br />i = 0 ;<br />swap (array + index, &probablyfalse) ;<br />while (1)<br />{<br />while (FALSE == array[i])<br />i++ ;<br />while (MAYBE == array[j])<br />j-- ;<br />if (i < j)<br />swap (array + i, array + j) ;<br />else<br />break ;<br />}<br />swap (array + i, &probablyfalse) ;</p><p>print_array (array, size) ;</p><p>return 0 ;<br />}</p><p>void print_array (const int * const array, const int size)<br />{<br />int i ;</p><p>for (i = 0; i < size; i++)<br />printf ("%s/n", FALSE == array[i] ? "FALSE" : (MAYBE == array[i] ? "MAYBE" : "TRUE")) ;<br />putchar ('/n') ;<br />}</p><p>void swap (int * const vala, int * const valb)<br />{<br />int temp ;</p><p>temp = *vala ;<br />*vala = *valb ;<br />*valb = temp ;<br />}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.