直接插入排序,折半排序,简单选择排序,冒泡排序,快速排序,堆排序,希尔排序等排序的C代码
#include <stdio.h>
//直接插入排序排序
void InsertionSort(int arr[], int size) {
int i, j, k, temp;
for (i = 2; i <= size; i++) {
temp = arr[i];
for (j = 0; j < i; j++)
if (temp < arr[j]) {
for (k = i - 1; k >= j; k--)
arr[k + 1] = arr[k];
arr[j] = temp;
break;
}
}
printf("直接插入法排序结果为:");
for (i = 0; i < 10; i++)
printf("%d\t", arr[i]);
printf("\n");
}
//折半插入
void BinaryInsertionSort(int arr[], int size) {
int i, j, temp, high, low, mid;
for (i = 1; i < size; i++)
{
temp = arr[i];
low = 0; /*第一次划分有序比较区间,比较区间的第一个元素所在位置为0*/
high = i - 1; /*第一次划分有序比较区间,比较区间的最后一个元素所在位置为n-1*/
/*比较查找Array[i]合适插入的位置*/
while (low <= high)
{
mid = (low + high) / 2;
if (temp >= arr[mid])
{
low = mid + 1;
}
else
{
high = mid - 1;
}
}
/*确定好位置后,将位置之后的数据后移,插入待排序数据*/
for (j = i - 1; j > high; j--)
{
arr[j + 1] = arr[j];
}
arr[j + 1] = temp;
}
printf("折半排序排序结果为:");
for (int i = 0; i < 10; i++)
printf("%d\t", arr[i]);
printf("\n");
}
//希尔排序
void ShellSort(int arr[], int size) {
int i, j, temp;
int gap;//步长
for (gap = size / 2; gap >= 1; gap /= 2) { // 步长初始化为数组长度的一半,每次遍历后步长减半
for (i = 0 + gap; i < size; i += gap) { //对步长为gap的元素进行直插排序,当gap为1时,就是直插排序
temp = arr[i]; //备份a[i]的值
j = i - gap; //j初始化为i的前一个元素(与i相差gap长度)
while (j >= 0 && arr[j] > temp) {
arr[j + gap] = arr[j]; //将在a[i]前且比temp的值大的元素向后移动一位
j -= gap;
}
arr[j + gap] = temp;
}
}
printf("希尔排序排序结果为:");
for (int i = 0; i < 10; i++)
printf("%d\t", arr[i]);
printf("\n");
}
//简单选择排序
void SelectSort(int arr[], int size) {
int min, temp;
int i, j;
for (i = 0; i <size - 1; i++)
{
min = i;
for (j=i+1; j<size; j++)
if (arr[min] > arr[j])
min = j;
if (i != min) {
temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
printf("简单选择排序排序结果为:");
for (int i = 0; i < 10; i++)
printf("%d\t", arr[i]);
printf("\n");
}
//冒泡排序
void BubbleSort(int arr[], int size) {
int temp;
for (int i = 1; i < size; i++)
for (int j = 0; j < size - i; j++)
if (arr[j] > arr[j + 1])
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
printf("冒泡法排序结果为:");
for (int k = 0; k < 10; k++)
printf("%d\t", arr[k]);
printf("\n");
}
int main() {
int arr[10];
printf("请输入十个数:");
for (int i = 0; i < 10; i++)
scanf_s("%d", &arr[i]);
printf("\n");
printf("初始数组排序为:");
for (int i = 0; i < 10; i++)
printf("%d\t", arr[i]);
printf("\n");
InsertionSort(arr, 9);
BinaryInsertionSort(arr, 10);
ShellSort(arr, 10);
BubbleSort(arr, 10);
SelectSort(arr, 10);
system("pause");
return 0;
}