直接插入排序:
#include <stdio.h>
void InsertSort(int b[],int size)
{
int i,j;
int temp = 0;
for(i = 0; i < size; i++)
{
int temp = b[i];
for(j = i - 1; j >= 0; j--)
{
if(temp > b[j])
{
b[j + 1] = b[j];
}
else
{
break;
}
}
b[j + 1] = temp;
}
}
int main()
{
int i;
int a[] = {3,5,1,7,6,9,0,4,19,2};
int length = sizeof(a) / sizeof(a[0]);
InsertSort(a, length);
for (i = 0; i < length; i++)
{
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
希尔排序:
#include <stdio.h>
void ShellSort(int b[],int size)
{
int i,j;
int temp = 0,h;
for(h = size / 2; h > 0; h /= 2)
{
for(i = h; i < size; i += h)
{
int temp = b[i];
for(j = i - h; j >= 0; j -= h)
{
if(temp > b[j])
{
b[j + h] = b[j];
}
else
{
break;
}
}
b[j + h] = temp;
}
}
}
int main()
{
int i;
int a[] = {3,5,1,7,6,9,0,4,19,2};
int length = sizeof(a) / sizeof(a[0]);
ShellSort(a, length);
for (i = 0; i < length; i++)
{
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
简单选择排序:
#include <stdio.h>
void SelectSort(int *num, int n)
{
int i,j;
int tmp = 0,min = 0;
for(i = 0; i < n - 1; i++)
{
min = i;
for(j = i + 1; j < n; j++)
{
if(num[j] < num[min])
{
min = j;
}
}
if(min != i)
{
tmp = num[i];
num[i] = num[min];
num[min] = tmp;
}
}
}
int main()
{
int i,len;
int num[]={2,7,3,0,5,6,12,4};
len = sizeof(num) / sizeof(num[0]);
SelectSort(num,len);
for(i = 0; i < len; i++)
{
printf("%d ",num[i]);
}
return 0;
}
快速排序:
#include <stdio.h>
int a[100];
int n;
void QuickSort(int low,int high)
{
int i=low,j=high;
int temp,temp1;
if(low >= high)
{
return;
}
while(i < j)
{
while(i < j && a[low] >= a[j])
{
j--;
}
while(i < j && a[i] >= a[low])
{
i++;
}
if(i < j)
{
temp = a[i];
a[i] = a[j];
a[j] =temp;
}
temp1 = a[i];
a[i] = a[low];
a[low] = temp1;
QuickSort( low, i - 1);
QuickSort( i + 1, high);
}
}
int main()
{
int i;
printf("Please input num:\n");
scanf("%d",&n);
printf("Please input:");
for(i = 1; i <= n; i++)
{
scanf("%d",&a[i]);
}
QuickSort(1,n);
for (i = 0; i <= n; i++)
{
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
堆排序:
#include <stdio.h>
void AdjustMinHeap(int *a,int pos,int len)
{
int temp;
int child;
for(temp = a[pos];2 * pos + 1 <= len; pos = child)
{
child = 2 * pos + 1;
if(child < len && a[child] >a[child + 1])
{
child++;
}
if(a[child] < temp)
{
a[pos] = a[child];
}
else
{
break;
}
}
a[pos] = temp;
}
void Swap(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
void print(int *a, int length)
{
int i;
for (i = 0; i < length; i++)
{
printf("%d ", a[i]);
}
printf("\n");
}
void HeapSort(int *array,int len)
{
int i;
for(i = len / 2 - 1; i >= 0; i--)
{
AdjustMinHeap(array,i,len - 1);
}
for(i = len - 1; i >= 0; i--)
{
Swap(&array[0],&array[i]);
AdjustMinHeap(array,0,i - 1);
}
}
int main()
{
int array[]={0,13,14,27,18,1};
int length = sizeof(array) / sizeof(array[0]);
HeapSort(array,length);
print(array,length);
return 0;
}
归并排序:
#include<stdio.h>
#include<stdlib.h>
void Merge(int a[],int start, int middle,int end )
{
int num1 = middle + 1 - start;
int num2 = end - middle;
int *A = (int*)malloc(sizeof(int) *num1);
int *B = (int*)malloc(sizeof(int) *num2);
int i,j,k;
for(i = 0,k = start; i < num1 ;i++,k++)
{
A[i] = a[k];
}
for(j = 0,k = middle + 1;j < num2 ;j++,k++)
{
B[j] = a[k];
}
for(i = 0, j = 0,k = start ;i < num1 && j < num2; k++)
{
if( A[i] < B[j] )
{
a[k] = A[i];
i++;
}
else
{
a[k] = B[j];
j++;
}
}
if( i < num1 )
{
for( j = i;j < num1 ;j++,k++)
{
a[k] = A[j];
}
}
if( j < num2 )
{
for( i = j;i < num2 ;i++,k++)
{
a[k] = B[i];
}
}
}
void MergeSort(int a[], int start, int end )
{
int i;
int middle;
if(start < end )
{
middle = ( start + end ) / 2;
MergeSort(a, start, middle );
/* i=0;
while( i < 4 )
{
printf("%d ",a[i]);
i++;
}
printf("\n");*/
MergeSort(a, middle + 1, end );
/* i=4;
while( i < 8 )
{
printf("%d ",a[i]);
i++;
}
printf("\n");*/
Merge(a,start,middle,end);
}
}
int main()
{
int i = 0;
int a[]= {8,4,5,7,1,3,6,2};
int length = sizeof( a ) / sizeof( a[0] );
MergeSort(a, 0, length - 1);
while( i < length )
{
printf("%d ",a[i]);
i++;
}
printf("\n");
return 0;
}
基数排序:
#include <stdio.h>
int Getmax(int *a, int n)
{
int i, max;
max = a[0];
for(i = 0; i < n; i++)
{
if(max < a[i])
{
max = a[i];
}
}
return max;
}
int countsort(int *a,int n, int exp)
{
int output[n];
int buckets[10] = {0};
int i;
printf("*5*\n");
for(i = 0; i < n; i++)
{
buckets[(a[i] / exp) % 10]++;
}
printf("*4*\n");
for(i = 1; i < n; i++)
{
buckets[i] += buckets[i - 1];
}
printf("*3*\n");
for(i = n - 1; i >= 0; i--)
{
output[buckets[(a[i] / exp) % 10] - 1] = a[i];
buckets[(a[i] / exp) % 10]--;
}
printf("*2*\n");
for(i = 0; i < n; i++)
{
a[i] = output[i];
}
return 1;
}
int Radixsort(int *a, int n)
{
int exp;
int max = Getmax(a, n);
printf("*1*\n");
for(exp = 1; (max / exp) > 0; exp *= 10 )
{
countsort(a,n,exp);
}
return 1;
}
int main()
{
int i;
int a[] = {278, 109, 63, 930, 589, 184, 505, 269, 8, 83};
int len = sizeof(a) / sizeof(a[0]);
Radixsort(a, len);
for(i = 0; i < len; i++)
{
printf("%d ", a[i]);
}
return 0;
}
冒泡(略)