数据结构编写算法 输入一串无序整数,采用冒泡排序和快速排序

如题所述

具体实现如下:
#include <stdio.h>
#include <malloc.h>

//交换两个数的位置
void exchange(int array[], int posOne, int posTwo)
{
array[posOne] = array[posTwo] + array[posOne];
array[posTwo] = array[posOne] - array[posTwo];
array[posOne] = array[posOne] - array[posTwo];
}

//冒泡排序算法
void bubble(int array[], int length)
{
bool exchanged = true;
for (int i = length - 1; i > 0 && exchanged; i--)
{
exchanged = false;
for (int j = 0; j < i; j++)
{
if (array[j] > array[j + 1])
{
exchange(array, j, j + 1);
exchanged = true;
}
}
}
}

//快速排序算法如下:
void qsort(int array[] ,int low, int high)
{
int key = low;
int left = low;
int right = high;

if (low >= high) //输入参数不合法则返回
return;

while(left < right)
{
//从右开始找到比array[key]小的数
while(right > left && array[right] > array[key])
right --;
//如果找到则两者交换位置
if (right > left)
{
exchange(array, key, right);
key = right;
}
//从左开始找到比array[key]大的数
while(left < right && array[left] < array[key])
left ++;
//如果找到则两者交换位置
if (left < right)
{
exchange(array, key, left);
key = left;
}
}
//对划分后的右序列继续进行快速排序
qsort(array ,key + 1, high);
//对划分后的左序列继续进行快速排序
qsort(array ,low, key - 1);
}
//打印函数
void print(int array[], int length)
{
int i;
for(i = 0; i < length; i++)
printf("%d ", array[i]);
printf("\n");
}

void main()
{
int i, n;
int *array;
scanf("%d", &n); //输入输入数的个数
if (n <= 0)
return;
array = (int *)malloc(sizeof(int) * n);
for(i = 0; i < n; i++)
scanf("%d",&array[i]);
print(array,n);
bubble(array, n); //冒泡排序
//qsort(array, 0 ,n - 1); //或者调用快速排序
print(array,n);
free(array);
}
温馨提示:答案为网友推荐,仅供参考
相似回答