冒泡排序:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 10
void bubble_sort(int k[], int n)
{
int i, j, temp;
for (i = 0; i < n - 1; i++)
{
for (j = 0; j < n-1-i; j++)
{
if (k[j] > k[j+1])
{
temp = k[j];
k[j] = k[j+1];
k[j+1] = temp;
}
}
}
}
int main()
{
int k[N];
int i;
srand((unsigned int)time(NULL));
for(i=0;i<N;i++)
k[i] = rand() % N;
bubble_sort(k,N);
for(i=0;i<N;i++)
printf("%d ",k[i]);
printf("\n");
system("pause");
return 0;
}
选择排序:
#include<stdio.h>
#include<stdlib.h>
void select(int k[], int n)
{
int i, j, temp, min;
for (i = 0; i < n - 1; i++)
{
min = i;
for (j = i + 1; j < n; j++)
{
if (k[j] < k[min])
min = j;
}
if (min != i)
{
temp = k[i];
k[i] = k[min];
k[min] = temp;
}
}
printf("\n");
}
int main()
{
int i, k[10] = { 2, 5, 7, 9, 0, 1, 2, 4, 3, 6 };
select(k, 10);
for (i = 0; i < 10; i++)
printf("%d ", k[i]);
system("pause");
return 0;
}
插入排序:
#include "stdio.h"
void InsertSort(int a[], int n)
{
int i,j,temp=0;
for(i=1;i<n;i++)
{
if(a[i]<a[i-1])
{
temp = a[i];
for(j=i-1;j>=0 && a[j]>temp;j--)
{
a[j+1]=a[j];
}
a[j+1]=temp;
}
}
}
void main()
{
int a[10]={0,6,67,34,56,45,12,4,7,49};
int i=0;
InsertSort(a,10);
for(i=0;i<10;i++)
printf("%d ",a[i]);
}
归并排序:
#include <stdio.h>
#include <stdlib.h>
#define N 7
void merge(int arr[], int low, int mid, int high){
int i, k;
int *tmp = (int *)malloc((high-low+1)*sizeof(int));
int left_low = low;
int left_high = mid;
int right_low = mid + 1;
int right_high = high;
for(k=0; left_low<=left_high && right_low<=right_high; k++){
if(arr[left_low]<=arr[right_low]){
tmp[k] = arr[left_low++];
}else{
tmp[k] = arr[right_low++];
}
}
if(left_low <= left_high){
for(i=left_low;i<=left_high;i++)
tmp[k++] = arr[i];
}
if(right_low <= right_high){
for(i=right_low; i<=right_high; i++)
tmp[k++] = arr[i];
}
for(i=0; i<high-low+1; i++)
arr[low+i] = tmp[i];
free(tmp);
return;
}
void merge_sort(int arr[], unsigned int first, unsigned int last){
int mid = 0;
if(first<last){
mid = (first+last)/2;
merge_sort(arr, first, mid);
merge_sort(arr, mid+1,last);
merge(arr,first,mid,last);
}
return;
}
int main(){
int i;
int a[N]={32,12,56,78,76,45,36};
printf ("排序前 \n");
for(i=0;i<N;i++)
printf("%d\t",a[i]);
merge_sort(a,0,N-1);
printf ("\n 排序后 \n");
for(i=0;i<N;i++)
printf("%d\t",a[i]); printf("\n");
system("pause");
return 0;
}
快速排序:
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
void PrintArray(int arr[], int len)
{
int i;
for (i = 0; i < len; i++)
printf("%d ", arr[i]);
printf("\n");
}
void QuickSort(int arr[], int start, int end)
{
int i = start, j = end;
int temp = arr[start];
if (i < j)
{
while (i < j)
{
while (i<j && arr[j] >= temp)
{
j--;
}
if (i < j)
{
arr[i] = arr[j];
i++;
}
while (i<j && arr[i] < temp)
{
i++;
}
if (i < j)
{
arr[j] = arr[i];
j--;
}
}
arr[i] = temp;
QuickSort(arr, start, i - 1);
QuickSort(arr, i + 1, end);
}
}
int main(){
int arr[10] = { 8, 6, 5, 7, 9, 0, 1, 2, 4, 3 };
int len = sizeof(arr) / sizeof(int);
PrintArray(arr, len);
QuickSort(arr, 0, len - 1);
PrintArray(arr, len);
system("pause");
return 0;
}
希尔排序:
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<time.h>
#define N 10
void PrintArray(int arr[], int len)
{
int i;
for ( i = 0; i < len; i++)
printf("%d ", arr[i]);
printf("\n");
}
void ShellSort(int arr[], int len)
{
int i, j, k, temp,increasement = len;
do{
increasement = increasement / 3 + 1;
for (i = 0; i < increasement; i++)
{
for (j = i + increasement; j < len; j += increasement)
{
if (arr[j] < arr[j - increasement])
{
temp = arr[j];
for (k = j - increasement; k >= 0 && arr[k] > temp; k -= increasement)
{
arr[k + increasement] = arr[k];
}
arr[k + increasement] = temp;
}
}
}
} while (increasement > 1);
}
int main()
{
int arr[N];
int i;
srand((unsigned)time(NULL));
for (i = 0; i < N; i++)
{
arr[i] = rand() % N;
}
PrintArray(arr, N);
ShellSort(arr, N);
PrintArray(arr, N);
system("pause");
return 0;
}
堆排序:
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
void PrintArray(int arr[], int len)
{
int i;
for (i = 0; i < len; i++)
printf("%d ", arr[i]);
printf("\n");
}
void swap(int arr[], int a, int b)
{
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
void HeapAdjust(int arr[], int index, int len)
{
int max = index;
int lchild = index * 2 + 1;
int rchild = index * 2 + 2;
if (lchild<len&&arr[lchild]>arr[max])
max = lchild;
if (rchild<len&&arr[rchild]>arr[max])
max = rchild;
if (max != index)
{
swap(arr, max, index);
HeapAdjust(arr, max, len);
}
}
void HeapSort(int arr[], int len)
{
int i;
for (i = len / 2 - 1; i >=0 ; i--)
{
HeapAdjust(arr, i, len);
}
for (i = len - 1; i >=0 ; i--)
{
swap(arr, 0, i);
HeapAdjust(arr, 0, i);
}
}
int main(){
int arr[10] = { 8, 6, 5, 7, 9, 0, 1, 2, 4, 3 };
int len = sizeof(arr) / sizeof(int);
PrintArray(arr, len);
HeapSort(arr,len);
PrintArray(arr, len);
system("pause");
return 0;
}
计数排序:
#include <stdio.h>
#include <stdlib.h>
#define random(x) rand()%(x)
#define NUM 100
#define MAXNUM 200
void countingSort(int A[], int n, int k){
int *c, *b;
int i;
c = (int *)malloc(sizeof(int)*k);
b = (int *)malloc(sizeof(int)*n);
for (i = 0; i < k; i++)
c[i] = 0;
for (i = 0; i < n; i++)
c[A[i]] += 1;
for (i = 1; i < k; i++)
c[i] = c[i - 1] + c[i];
for (i = n - 1; i >= 0; i--)
{
b[c[A[i]] - 1] = A[i];
c[A[i]] -= 1;
}
for (i = 0; i < n; i++)
A[i] = b[i];
free(c);
free(b);
}
void printArray(int A[], int n){
int i = 0;
for (i = 0; i < n; i++){
printf("%4d", A[i]);
}
printf("\n");
}
int main()
{
int A[NUM];
int i;
for (i = 0; i < NUM; i++)
A[i] = random(MAXNUM);
printf("before sorting:\n");
printArray(A, NUM);
countingSort(A, NUM, MAXNUM);
printf("after sorting:\n");
printArray(A, NUM);
return 0;
}
桶排序:
#include <stdio.h>
void main()
{
int a[11],i,j,t;
for(i=0;i<=10;i++)
{
a[i]=0;
}
for(i=0;i<5;i++)
{
scanf("%d",&t);
a[t]++;
}
for(i=0;i<=10;i++)
{
for(j=0;j<a[i];j++)
{
printf("%d",i);
}
}
}
基数排序:
#include<stdio.h>
#define Max_ 10
#define RADIX_10 10
#define KEYNUM_31 10
void Show(int arr[], int n)
{
int i;
for ( i=0; i<n; i++ )
printf("%d ", arr[i]);
printf("\n");
}
int GetNumInPos(int num,int pos)
{
int temp = 1;
int i;
for (i = 0; i < pos - 1; i++)
temp *= 10;
return (num / temp) % 10;
}
void RadixSort(int* pDataArray, int iDataNum)
{ int i,pos,j,k;
int *radixArrays[RADIX_10];
for (i = 0; i < 10; i++)
{
radixArrays[i] = (int *)malloc(sizeof(int) * (iDataNum + 1));
radixArrays[i][0] = 0;
}
for (pos = 1; pos <= KEYNUM_31; pos++)
{
for (i = 0; i < iDataNum; i++)
{
int num = GetNumInPos(pDataArray[i], pos);
int index = ++radixArrays[num][0];
radixArrays[num][index] = pDataArray[i];
}
for (i = 0, j =0; i < RADIX_10; i++)
{
for (k = 1; k <= radixArrays[i][0]; k++)
pDataArray[j++] = radixArrays[i][k];
radixArrays[i][0] = 0;
}
}
}
int main()
{
int arr_test[Max_] = { 8, 4, 2, 3, 5, 1, 6, 9, 0, 7 };
Show( arr_test, Max_ );
RadixSort( arr_test, Max_);
Show( arr_test, Max_ );
return 0;
}
以上就是所有代码,希望同学们好好学习!!!