C语言版各种排序算法(持续更新中)

#include "stdio.h"  
#include "time.h"  
#include "math.h"  
#include "stdlib.h"  
#include "limits.h"  
  
#define SIZE 100  
#define MAX 1000  
  
void Swap(int *a, int *b)  
{  
    int temp;  
    if(*a != *b)  
    {  
        temp = *a;  
        *a = *b;  
        *b = temp;  
    }  
}  
void Print(int *arr, int size)  
{  
    int i;  
    for(i=0;i<size;i++)  
    {  
        printf("%6d", *(arr+i));  
        if(0==(i+1)%10) printf("\n");  
    }  
}  
//冒泡排序  (稳定)
void BubbleSort(int *arr, int size)  
{  
    int i,j;  
    for(i=0;i<size-1;i++)  
    {  
        for(j=size-1;j>i;j--)  
        {  
            if(arr[j]<arr[j-1]) Swap(arr+j,arr+j-1);  
        }  
    }  
}  
//选择排序  (不稳定)
void SelectSort(int *arr, int size)  
{  
    int k,i,j;  
    for(i=0;i<size-1;i++)  
    {  
        k=i;  
        for(j=i+1;j<size;j++)  
        {  
            if(arr[j]<arr[k]) k = j;  
        }  
        if(k!=i) Swap(arr+i,arr+k);  
    }  
}  
//插入排序 (稳定)
void InsertSort(int *arr, int size)
{
	int key,i,j;
	for(i=1;i<size;i++)
	{
		key = arr[i];
		j = i-1;
		while(j>=0 && arr[j]>key) {
			arr[j+1] = arr[j];
			j--;
		}
		arr[j+1] = key;
	}
}
//快速排序
void qSort(int *arr,int l,int r)
{
	int i = l;
	int j = r;
	int key = arr[(l+r)/2];
	while(i<j) {
		for(;(i<r)&&(arr[i]<key);i++);
		for(;(j>l)&&(arr[j]>key);j--);
		if(i<=j) {
			Swap(arr+i,arr+j);  
			i++;
			j--;
		}
	}
	if(i<r) qSort(arr,i,r);
	if(j>l) qSort(arr,l,j);
}
void QuickSort(int *arr, int size)
{
	qSort(arr,0,size-1);	
}
void main()   
{  
    int arr[SIZE], i;  
    printf("The array is:\n");  
    srand((unsigned)time(0));  
    for(i=0;i<SIZE;i++)  
        arr[i] = rand()%MAX;  
  
    Print(arr,SIZE);  
    //choose a kind of sort method 
	
    //BubbleSort(arr, SIZE);  
    //SelectSort(arr, SIZE);  
	//InsertSort(arr, SIZE);  
	QuickSort(arr, SIZE);  


    printf("After Sort,the array is:\n");  
    Print(arr,SIZE);  
  
}  

你可能感兴趣的:(c,算法,语言,include,math.h)