利用C语言数据结构写一段代码要求如下随机生成30个整数分别对这批数据进行直接插入排序、简单选择排序、冒泡排序、快速排序、堆排序和希尔排序并进行时间和空间性能分析。并画出该代码的流程图
本平台无法插入图片,请您前往我的博客查看代码和流程图:https://www.cnblogs.com/zhuxiaojie/p/14183903.html
代码如下:
#include <stdio.h> #include <stdlib.h> #include <time.h>
#define MAXSIZE 30 // 定义排序序列的长度
// 直接插入排序 void InsertSort(int arr[], int len) { int i, j, temp; for (i = 1; i < len; i++) { temp = arr[i]; for (j = i - 1; j >= 0 && arr[j] > temp; j--) { arr[j + 1] = arr[j]; } arr[j + 1] = temp; } }
// 简单选择排序 void SelectSort(int arr[], int len) { int i, j, minIndex, temp; for (i = 0; i < len - 1; i++) { minIndex = i; for (j = i + 1; j < len; j++) { if (arr[j] < arr[minIndex]) { minIndex = j; } } if (minIndex != i) { temp = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = temp; } } }
// 冒泡排序 void BubbleSort(int arr[], int len) { int i, j, temp; for (i = 0; i < len - 1; i++) { for (j = 0; j < len - 1 - i; j++) { if (arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } }
// 快速排序 void QuickSort(int arr[], int left, int right) { if (left >= right) { return; } int i = left, j = right, pivot = arr[left]; while (i < j) { while (i < j && arr[j] >= pivot) { j--; } if (i < j) { arr[i++] = arr[j]; } while (i < j && arr[i] < pivot) { i++; } if (i < j) { arr[j--] = arr[i]; } } arr[i] = pivot; QuickSort(arr, left, i - 1); QuickSort(arr, i + 1, right); }
// 堆排序 void AdjustHeap(int arr[], int i, int len) { int temp = arr[i], j; for (j = 2 * i + 1; j < len; j = 2 * j + 1) { if (j + 1 < len && arr[j] < arr[j + 1]) { j++; } if (temp >= arr[j]) { break; } arr[i] = arr[j]; i = j; } arr[i] = temp; }
void HeapSort(int arr[], int len) { int i, temp; for (i = len / 2 - 1; i >= 0; i--) { AdjustHeap(arr, i, len); } for (i = len - 1; i > 0; i--) { temp = arr[0]; arr[0] = arr[i]; arr[i] = temp; AdjustHeap(arr, 0, i); } }
// 希尔排序 void ShellSort(int arr[], int len) { int i, j, gap, temp; for (gap = len / 2; gap > 0; gap /= 2) { for (i = gap; i < len; i++) { temp = arr[i]; for (j = i - gap; j >= 0 && arr[j] > temp; j -= gap) { arr[j + gap] = arr[j]; } arr[j + gap] = temp; } } }
int main() { int arr[MAXSIZE]; int i;
srand((unsigned int)time(NULL)); // 设置随机种子
for (i = 0; i < MAXSIZE; i++)
{
arr[i] = rand() % 100;
printf("%d ", arr[i]);
}
printf("\n");
InsertSort(arr, MAXSIZE);
for (i = 0; i < MAXSIZE; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
SelectSort(arr, MAXSIZE);
for (i = 0; i < MAXSIZE; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
BubbleSort(arr, MAXSIZE);
for (i = 0; i < MAXSIZE; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
QuickSort(arr, 0, MAXSIZE - 1);
for (i = 0; i < MAXSIZE; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
HeapSort(arr, MAXSIZE);
for (i = 0; i < MAXSIZE; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
ShellSort(arr, MAXSIZE);
for (i = 0; i < MAXSIZE; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
return 0;
原文地址: https://www.cveoy.top/t/topic/hsKc 著作权归作者所有。请勿转载和采集!