练习_C指针与排序算法
发布日期:2021-05-14 23:42:50 浏览次数:13 分类:精选文章

本文共 8220 字,大约阅读时间需要 27 分钟。

���������������������������

������1������������������������������������������������32������������������������������4������

���������������������������������������������������������������������������32���������������������������������int*���������������4������������64������������������8������������������������������������������������������������������������

#include 
#include
#include
int main() {
short *p_short = NULL;
printf("size short=%d byte\n", sizeof(short), sizeof(p_short));
double *p_double = NULL;
printf("size double=%d byte\n", sizeof(double), sizeof(p_double));
char *p_char = NULL;
printf("size char=%d byte\n", sizeof(char), sizeof(p_char));
void *p_void = NULL;
printf("size void=%d byte\n", sizeof(void), sizeof(p_void));
return 0;
}

���������������

size short=2 byte
size double=8 byte
size char=1 byte
size void=4 byte

������2: ���������������������������������������1������������������������������

���������������������������

#include 
#include
#include
#include
#define LEN 5
// ������������������
void input_random(int *arr, int len) {
srand(time(0));
int *p = arr;
for(; p < arr + len; p++) {
*p = rand() % 100;
}
}
// ���������������1������������
void output(int *arr, int len) {
for(int i = 0; i < len; i++) {
arr[i] /= 10 + arr[i] % 10;
}
}
// ������������
void select_sort(int *arr, int len) {
int pos, i;
for(i = 0; i < len - 1; i++) {
pos = i;
for(int j = i + 1; j < len; j++) {
if(arr[pos] > arr[j]) {
pos = j;
}
}
if(pos != i) {
int temp = arr[i];
arr[i] = arr[pos];
arr[pos] = temp;
}
}
}
// ���������
int main() {
int arr[LEN] = {0};
input_random(arr, LEN);
printf("������������: ");
for(int i = 0; i < LEN; i++) {
printf("%d ", arr[i]);
}
printf("\n");
// ���������1
output(arr, LEN);
printf("���1������������������: ");
for(int i = 0; i < LEN; i++) {
printf("%d ", arr[i]);
}
printf("\n");
sleep(1);
// ������
select_sort(arr, LEN);
printf("���������������: ");
for(int i = 0; i < LEN; i++) {
printf("%d ", arr[i]);
}
return 0;
}

���������������

������������: 37 14 42 18 53
���1������������������: 49 15 76 23 30
���������������: 15 23 30 42 49

������3������������������������������������������������

���������������������������������

#include 
#include
#include
#define LEN 90000
// ������������������������
void init(int *arr, int len) {
srand(time(0));
for(int i = 0; i < len; i++) {
arr[i] = rand() % 1000;
}
}
// ������������
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
// ������������
void select_sort(int *arr, int len) {
int i, j, pos;
for(i = 0; i < len; i++) {
pos = i;
for(j = i + 1; j < len; j++) {
if(arr[pos] > arr[j]) {
pos = j;
}
}
if(pos != i) {
swap(arr + i, arr + pos);
}
}
}
// ���������
void bubble_sort(int *arr, int len) {
int n = len;
for(int i = 0; i < n; i++) {
for(int j = 0; j < n - i - 1; j++) {
if(arr[j] > arr[j + 1]) {
swap(arr + j, arr + j + 1);
}
}
}
}
// ������������
void insert_sort(int *arr, int len) {
for(int i = 1; i < len; i++) {
int value = arr[i];
int j = i - 1;
while(j >= 0 && value > arr[j]) {
arr[j] = arr[j + 1];
j--;
}
arr[j + 1] = value;
}
}
// ������������
void quick_sort(int *arr, int left, int right) {
if(left >= right) return;
int pivot = arr[left];
int left_ptr = left, right_ptr = right;
while(left_ptr < right_ptr && arr[left_ptr] <= pivot) {
left_ptr++;
}
while(right_ptr > left_ptr && arr[right_ptr] > pivot) {
right_ptr--;
}
swap(arr + left, arr + pivot);
quick_sort(arr, left, left_ptr - 1);
quick_sort(arr, left_ptr + 1, right);
}
// ������������������������
int test_sort(int *arr, int len, void (*sort_func)(int *, int)) {
int start = 0;
int end = len - 1;
int start_time, end_time;
srand(time(0));
init(arr, len);
// ���������������
clock_t begin = clock();
sort_func(arr, len);
clock_t end = clock();
int time_diff = end - begin;
// ������������������������������
for(int i = 0; i < len; i++) {
arr[i] = 0;
}
init(arr, len);
return (int)time_diff / 1000;
}
int main() {
// ������������������������
int *arr = (int *)malloc(LEN * sizeof(int));
init(arr, LEN);
int select_time = test_sort(arr, LEN, select_sort);
printf("������������: %dms\n", select_time);
// ���������������������
free(arr);
arr = (int *)malloc(LEN * sizeof(int));
init(arr, LEN);
int bubble_time = test_sort(arr, LEN, bubble_sort);
printf("���������: %dms\n", bubble_time);
// ������������������������
free(arr);
arr = (int *)malloc(LEN * sizeof(int));
init(arr, LEN);
int insert_time = test_sort(arr, LEN, insert_sort);
printf("������������: %dms\n", insert_time);
free(arr);
return 0;
}

��������������� ������������: 22715ms

���������: 73966ms
������������: 17577ms

������4������������������������������������������������������������

���������������������������������������

#include 
#include
#include
#include
#define LEN 5
// ���������������������
void init(int *arr, int len) {
srand(time(0));
for(int i = 0; i < len; i++) {
arr[i] = rand() % 1000;
}
}
// ������������������������
void quick_sort1(int *arr, int left, int right) {
if(left >= right) return;
int pivot = arr[left];
int left_ptr = left;
int right_ptr = right;
while (arr[left_ptr] <= pivot && left_ptr < right_ptr) {
left_ptr++;
}
while (arr[right_ptr] > pivot && right_ptr > left_ptr) {
right_ptr--;
}
swap(arr + left, arr + pivot);
quick_sort1(arr, left, left_ptr - 1);
quick_sort1(arr, left_ptr + 1, right);
}
// ���������������������������
void quick_sort2(int *arr, int start, int end) {
if(start >= end) return;
int pivot = *(arr + start);
int left_ptr = start;
int right_ptr = end;
while (arr[left_ptr] < pivot && left_ptr < right_ptr) {
left_ptr++;
}
while (arr[right_ptr] > pivot && right_ptr > start) {
right_ptr--;
}
swap(arr + start, arr + right_ptr);
quick_sort2(arr, start, right_ptr - 1);
quick_sort2(arr, right_ptr + 1, end);
}
// ������������������
int test_sort(int *arr, int len, void (*sort_func)(int *, int, int)) {
srand(time(0));
init(arr, len);
clock_t begin = clock();
sort_func(arr, 0, len - 1);
clock_t end = clock();
return (end - begin) / 1000;
}
int main() {
// ���������������
int arr[LEN] = {0};
init(arr, LEN);
printf("������������: ");
for(int i = 0; i < LEN; i++) {
printf("%d ", arr[i]);
}
printf("\n");
// ������������������������
int single_time = test_sort(arr, LEN, quick_sort1);
printf("������������������������: %dms\n", single_time);
// ������������������������������
for(int i = 0; i < LEN; i++) {
arr[i] = 0;
}
init(arr, LEN);
printf("���������������: ");
for(int i = 0; i < LEN; i++) {
printf("%d ", arr[i]);
}
printf("\n");
// ���������������������������
int double_time = test_sort(arr, LEN, quick_sort2);
printf("���������������������������: %dms\n", double_time);
return 0;
}

���������������

������������: 970 371 445 382 803
������������������������: 0
���������������: 970 371 445 382 803
���������������������������: 0

������

������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

上一篇:C语言_结构体练习
下一篇:C语言_指针及回调函数练习

发表评论

最新留言

关注你微信了!
[***.104.42.241]2025年04月20日 14时12分45秒