1. 程式人生 > 其它 >實驗8.1 歸併排序

實驗8.1 歸併排序

技術標籤:資料結構實驗c語言排序演算法資料結構

文章目錄

標頭檔案

#include<stdio.h>

int num = 0;

輸出數

void print_data(int data[], int first, int last)
{
	int i = 0;
	for (i = 0;i < first;i++)
		printf("*");
	for (i = first;i <= last;i++)
		printf("%3d", data[i]);
	for (i =
last;i <= 8;i++) printf("*"); printf("\n"); }

一趟歸併

void merge(int array[], int first, int last)
{
	int mid, i1, i2, i3;
	int temp[10];
	int i, j;
	mid = (first + last) / 2;
	i1 = 0;
	i2 = first;
	i3 = mid + 1;
	while (i2 <= mid && i3 <= last) //以mid分割開兩個歸併序列,以前面序列的第一個元素和後面序列的第一個元素對比,小的放入新生成的序列中 
{ if (array[i2] < array[i3]) temp[i1++] = array[i2++]; else temp[i1++] = array[i3++]; } if (i2 <= mid) //後面的序列已經全部放進新生成的序列中去了,但前面的序列還有一部分殘餘 { while(i2<=mid) //直接將未放入新生成序列的元素放入 temp[i1++] = array[i2++]; } if (i3 <= last) //前面的序列全部放進去了,但後面的序列還有一部分殘餘 { while(i3<=
last) temp[i1++] = array[i3++]; } for (i = first, j = 0;i <= last;i++, j++) array[i] = temp[j]; //將舊的序列用新的序列覆蓋 print_data(array, first, last); }

歸併排序

void mergesort(int data[], int first, int last)
{
	int mid;
	if (first < last)
	{
		mid = (first + last) / 2;
		mergesort(data, first, mid);
		mergesort(data, mid + 1, last);
		merge(data, first, last);
	}
}

主函式

int main()
{
	int a[] = { 1,8,6,4,10,5,3,2,22 };
	mergesort(a, 0, 8);
}

執行結果

在這裡插入圖片描述