北航计算机软件技术基础实验报告计软实验报告3——冒泡排序和快速排序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告

实验名称冒泡排序和快速排序

班级

学号

姓名

成绩

#include

#include

#define N 20

//定义用于比较和交换计数的全局变量

static int compare, move;

int main()

{

int data1[N], data2[N];

int i;

void bubbleSort(int[20]);

void quickSort(int[20], int, int);

//创建两个相同的数组用于两种排序方法

for (i = 0; i

{

data1[i] = rand() % 100 + 1;

data2[i] = data1[i];

}

printf("The original array:\n");

for (i = 0; i

printf("%d ", data1[i]);

//调用冒泡排序法

bubbleSort(data1);

//计数器置零

compare = 0;

move = 0;

//调用快速排序法

quickSort(data2, 0, N - 1);

printf("Quicksort completed!The results are as follows:\n");

for (i = 0; i

printf("%d ", data2[i]);

printf("\nCompare times:%d\n", compare);

printf("Move times:%d", move);

return 0;

}

//冒泡排序法

void bubbleSort(int a[N])

{

int i, j, temp;

compare = 0;

move = 0;

//总共循环N-2轮

for (i = 0; i

{

//每轮循环从头开始,到有序序列前结束

for (j = 0; j

{

//比较交换,将较大的数放到后面

if (a[j + 1]

{

temp = a[j + 1];

a[j + 1] = a[j];

a[j] = temp;

move++;

}

compare++;

}

}

printf("\n\nBubblesort completed!The results are as follows:\n");

for (i = 0; i

printf("%d ", a[i]);

printf("\nCompare times:%d\n", compare);

printf("Move times:%d\n\n", move);

}

//快速排序法

void quickSort(int a[N], int left, int right)

{

//将数组一分为二的键值

int pivotkey;

if (left < right)

{

//第一次排序将数组一分为二

pivotkey = partition(a, left, right);

//递归调用,对数据比键值小的数组排序

quickSort(a, left, pivotkey - 1);

//递归调用,对数据比键值大的数组排序

quickSort(a, pivotkey + 1, right);

}

}

//进行一次快速排序

int partition(int a[N], int left, int right)

{

int key, i, low = left, high = right;

//设置基准

key = a[low];

while (low

{

//high中数据比基准大,则向前依次查找

while ((low < high) && (a[high] > key))

{

high--;

compare++;

}

//如果不是两指针相遇,说明存在需要交换到low的值

if (low < high)

{

a[low] = a[high];

move++;

}

//low中数据比基准小,则向后依次查找

while ((low < high) && (a[low] <= key))

{

low++;

compare++;

}

//如果不是两指针相遇,说明存在需要交换到high的值

if (low

{

a[high] = a[low];

move++;

}

}

//首尾指针相遇后,将基准放入空位

a[low] = key;

//返回此时的键值

return low;

}

相关文档
最新文档