C語言實現的演算法總結

2021-05-26 19:18:18 字數 2714 閱讀 9079

快速排序  quick sort

基本思想:以乙個數為參照,把比它小的排左邊,比它大的排右邊(從小到大排序)

左邊找大於參照的,右邊找小於參照的,找到就彼此交換。 5

69110

8723

0    原順序 第乙個為參照 5

09110

8723

6    i從左第二個向右掃瞄 j從右掃瞄 符合條件就交換 5

03110

8729

6503

1287

10962

0315

87109

6/************************

a 為陣列名形參

low 為最小下標

high 為最大下標

*************************/

第一種方式:

voidquicksort(

int

*a,intlow,

inthigh) 

else

if( a[j]

> a[low])     

/* 從右到左找比a[low]小的元素*/

else

/* 若找到且滿足條件,則交換  */ }

temp

= a[low];

a[low]

= a[i];

a[i]

= temp;

if( i

> low )            

/* 左邊待排數的進入遞迴排序 */

if( j

< high)           

/* 右邊待排數的進入遞迴排序 */ }

第二種方式:

voidquicksort(

int

*a,intlow,

inthigh)

/*  有相等的數存在時,就會出錯 */

while( a[j]

> a[low]

&& i

< j)     

/* 從右到左找比a[low]小的元素 */

if( i

< j )      

/*若找到且滿足條件,則交換,必須加限制條件 i }

temp

= a[low];

a[low]

= a[i];

a[i]

= temp;

if( i

> low )

if( j

< high)

} 第三種方式:

voidquicksort(

int

*a,intlow,

inthigh)

if(i

< j)

while(a[i]

< temp

&& i

< j)

if(i

< j)

} a[i]

= temp;

if( i

> low )

if( j

< high)

} b:插入排序

①:直接插入排序   insert sort

voidinsertsort(

int

*a,intn)

a[j +

1] = temp; }

} ②:希爾排序       shell sort

voidshellsort(

int

*a,intn)

a[j +span]

= temp; }

}span

= span

/2; }

} c:選擇排序

①:直接選擇排序  select sort

重點:設定乙個flag標誌位,記錄每次迴圈中的最小(大)數的下標,迴圈完成時交換。

減少了交換次數。

voidselectsort(

int

*a,intn)

} if(flag

!= i)       

//如果最小(數)不是每次迴圈的第乙個,則交換 }

}

演算法總結 棧 佇列 c語言實現

還是一道題typedef struct node1 d typedef struct node2 z d d1,d2 z z 初始化佇列d1和d2,此時兩人手中沒有牌 d1.head 0 d1.tail 0 d2.head 0 d2.tail 0 初始化棧z為空,最開始桌面上也沒有牌 z.top 0...

演算法總結 鍊錶 c語言實現

1.單鏈表的建立 頭插 尾插 2.迴圈鍊錶 include include typedef struct node g main 找到第乙個鍊錶的最後乙個節點 q head link while q link null q link head1 link 讓最後乙個節點的link指向head1的下乙...

c語言實現磁碟排程演算法 C語言實現洗牌演算法

首先看一道題目 有乙個大小為100的陣列,裡面的元素是從 1 到 100,隨機從陣列中選擇50個不重複數。用math.random 100,就可以拿到乙個 0 到 99 的隨機數,是不是重複50次就可以了?當然不是,假如,第一次隨機到5,第二次如果再一次隨機到5的話,要求是選擇不重複的數,所以要選出...