You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
1.5 KiB
80 lines
1.5 KiB
#include<stdio.h>
|
|
#include<stdlib.h>
|
|
void chiocesort(int arr[]) {
|
|
for (int i = 0; i < 29; i++) {
|
|
int index = i;
|
|
for (int j = i; j < 30; j++) {
|
|
if (arr[j] < arr[index]){
|
|
index = j;
|
|
}
|
|
}
|
|
int temp = arr[i];
|
|
arr[i] = arr[index];
|
|
arr[index] = temp;
|
|
for (int k = 0; k < 30; k++) {
|
|
printf("%d ", arr[k]);
|
|
}
|
|
printf("\n");
|
|
}
|
|
}
|
|
void adjustHeap(int arr[], int n, int root) {
|
|
int parent = root;
|
|
int child = root * 2 + 1;
|
|
while (child < n) {
|
|
if ((child + 1) < n && arr[child] < arr[child + 1]) {
|
|
child++;
|
|
}
|
|
if (arr[parent] < arr[child]) {
|
|
int temp = arr[parent];
|
|
arr[parent] = arr[child];
|
|
arr[child] = temp;
|
|
parent = child;
|
|
child = parent * 2 + 1;
|
|
}
|
|
else
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
// 堆排序(升序)
|
|
void heapSort(int arr[], int n) {
|
|
//建堆
|
|
printf("建堆过程\n");
|
|
for (int i = n / 2 - 1; i >= 0; i--) {
|
|
adjustHeap(arr, n, i);
|
|
for (int k = 0; k < 30; k++) {
|
|
printf("%d ", arr[k]);
|
|
}
|
|
printf("\n");
|
|
}
|
|
printf("调整过程\n");
|
|
for (int i = n - 1; i >= 0; i--) {
|
|
int temp = arr[i];
|
|
arr[i] = arr[0];
|
|
arr[0] = temp;
|
|
adjustHeap(arr, i, 0);
|
|
for (int k = 0; k < 30; k++) {
|
|
printf("%d ", arr[k]);
|
|
}
|
|
printf("\n");
|
|
}
|
|
}
|
|
int main() {
|
|
int arr[30];
|
|
int arr1[30];
|
|
printf("原始数组\n");
|
|
for (int i = 0; i < 30; i++) {
|
|
arr1[i] = rand() % 100;
|
|
arr[i] = arr1[i];
|
|
printf("%d ",arr[i]);
|
|
}
|
|
printf("\n");
|
|
printf("选择排序\n");
|
|
chiocesort(arr);
|
|
printf("\n");
|
|
printf("heap\n");
|
|
heapSort(arr1, 30);
|
|
return 0;
|
|
}
|