记录一下,排序的一些算法:
选择排序,插入排序,冒泡排序,希尔排序,快速排序
还有数组输入,随机数快速初始化数组的小心得。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int array_length = 6;
int n;
void chose_sort(int* arr);
void insert_sort(int* arr);
void bubble_sort(int* arr);
void shell_sort(int* arr);
void quick_sort(int left, int right, int* arr);
int* arrayinit();
void print(int* arr);
void _print(int* arr);
int* random_function();//随机函数初始化数组
int main()
{
//int arr[] = { 102,554,908,90,374,16 };
int* arr = random_function();
//_print(arr);
//chose_sort(arr);
//insert_sort(arr);
//bubble_sort(arr);
//shell_sort(arr);
quick_sort(0, array_length - 1, arr);
_print(arr);
return 0;
}
int* arrayinit()
{
int* arr = NULL;
printf("please input number of data:");
scanf_s("%d", &n);
arr = (int*)calloc(n, sizeof(int));
if (arr == NULL)
{
printf("NO enough memory");
exit(-1);
}
printf("please input data:");
for (int i = 0; i <= n - 1; i++)
{
scanf_s("%d,", arr + i);
}
return arr;
}
void print(int* arr)
{
int i;
for (i = 0; i <= n - 1; i++)
{
printf("%d ", *(arr + i));
}
free(arr);
}
void _print(int* arr)
{
int i;
printf("The slected result is as follows:\n");
for (i = 0; i <= array_length - 1; i++)
{
printf("%d ", arr[i]);
}
putchar('\n');
}
int* random_function()
{
int* arr = NULL;
int i;
arr = (int*)calloc(array_length, sizeof(int));
if (NULL == arr)
{
printf("NO enough memory");
exit(-1);
}
srand(unsigned(time(NULL)));
for (i = 0; i <= array_length - 1; i++)
{
arr[i] =rand()%100+1;
}
return arr;
}
//选择排序 升序
void chose_sort(int* arr)
{
int i, j, k, temp;
for (i = 0; i <= array_length - 1; i++)
{
k = i;
for (j = i + 1; j <= array_length - 1; j++)
{
if (arr[k] > arr[j])
{
k = j;
}
}
if (k != i)
{
temp = arr[i];
arr[i] = arr[k];
arr[k] = temp;
}
}
}
//插入排序
void insert_sort(int* arr)
{
int i, j, temp;
for (i = 1; i <= array_length - 1; i++)
{
temp = arr[i];
for (j = i - 1; j >= 0 && temp < arr[j]; j--)
{
arr[j + 1] = arr[j];
}
arr[j + 1] = temp;
}
}
//冒泡排序
void bubble_sort(int* arr)
{
int i, j, temp;
for (i = 1; i <= array_length - 1; i++)
{
for (j = 0; j <= array_length - i - 1; j++)
{
if (arr[j + 1] < arr[j])
{
temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
}
}
//希尔排序
void shell_sort(int* arr)
{
int i, j, temp, gap;
for (gap = array_length / 2; gap >= 1; gap /= 2)
{
for (i = gap; i <= array_length - 1; i += gap)
{
temp = arr[i];
for (j = i - gap; j >= 0 && temp < arr[j]; j -= gap)
{
arr[j + gap] = arr[j];
}
arr[j + gap] = temp;
}
}
}
//快速排序
void quick_sort(int left, int right, int* arr)
{
int i, j, base, temp;
if (left >= right)
{
return;
}
i = left, j = right;
base = arr[i];
while (i < j)
{
while (arr[j] > base && i < j)
{
j--;
}
arr[i] = arr[j];
while (arr[i] < base && i < j)
{
i++;
}
arr[j] = arr[i];
}
arr[i] = base;
quick_sort(left, i - 1, arr);
quick_sort(i + 1, right, arr);
}