C語言 穩定排序(冒泡,插排,歸併)

2021-10-10 05:13:17 字數 1705 閱讀 3675

什麼叫穩定排序呢?比如排序中有兩個一摸一樣的數字,如果排完序,兩個相同的數字順序沒有改變,就是穩定的, 反之,就是非穩定的。

穩定排序包括:

另外,排序演算法還能分為: 內部排序、外部排序(當前陣列不可以全部載入到記憶體中,需要分段載入)

#include

#include

#include

#include

#define swap(a, b) __typeof(a) t = a; a = b; b = t

int num[

1000];

//小的在前

//插排

void

insert_sort

(int

*num,

int n)}/*

* for (int j = i; j > 0 && num[j] < num[j - 1]; j--)

*/}return;}

//冒泡

void

bubble_sort

(int

*num,

int n)}}

}//歸併

void

merge_sort

(int

*num,

int l,

int r)

return;}

//中分

int mid =

(l + r)

>>1;

merge_sort

(num, l, mid)

;merge_sort

(num, mid +

1, r)

;//回溯

//開闢新的空間,將排序好的數往裡面放

int*temp =

(int*)

malloc

(sizeof

(int)*

(r - l +1)

);int p1 = l, p2 = mid +

1, k =0;

while

(p1 <= mid || p2 <= r)

else

}memcpy

(num + l, temp,

sizeof

(int)*

(r - l +1)

);free

(temp)

;return;}

void

out(

int*arr,

int n)

printf

("\n");

}int

main()

out(arr, maxop)

;int test[maxop]

;memcpy

(test, arr,

sizeof

(int

)*maxop)

;//printf("insert:");

//insert_sort(test, maxop);

//printf("bubble:");

//bubble_sort(test, maxop);

printf

("merge:");

merge_sort

(test,

0, maxop-1)

;out

(test, maxop)

;#undef maxop

}

C 實現各種排序 快排 插排 冒泡

1 插入排序 插入排序 主要思想 將陣列中的第乙個數認為是有序排列,剩下的n 1個數與第乙個數比較,再進行排序 有兩層迴圈,第一層控制排序的趟數,第二層控制每一趟比較的個數 include using namespace std int main for int i 0 i 10 i cin a i...

排序 冒泡,快排,歸併。

1 冒泡 就是每次相鄰的比較,較大的移到後面,一次後就移動最大的到最後面了。include void maopao int a,int len void main int len sizeof a sizeof a 0 maopao a,len for int x1 0 x12 快速排序,用遞迴來理...

穩定排序(插入排序 氣泡排序 歸併排序)

插入排序 我們可以從字面意思去理解這個排序方式,可以把序列前後分為兩部分有序序列和待排序列,不斷的在待排序列中取出乙個數按某規則 從大到小或者從小到大 插入到有序序列中,直到待排序列都完成排序結束。演示 視覺化演算法 推薦 ps 本圖出處為此 c語言 實現 void insert sort int ...