经典排序算法
main函数
#include<stdio.h>
void InsertSort(int a[],int n);
void BinaryInsertSort(int a[],int n);
void SimpleSelectSort(int a[],int n);
void HeapSort(int a[],int n);
void BubbleSort(int a[],int n);
void QuickSort(int a[],int low,int high);
void MergeSort(int a[],int low,int high);
int main()
{
int a[1000];
int i,j,choose,n=0;
char s;
printf("please enter the number your array has:\n");
for(i=1;i<999&&s!='\n';i++){
scanf("%d",&a[i]);
s=getchar();
n++;
}
printf("please select the sorting method you want to use:\n"
"InsertSort ********1\n"
"BinaryInsertSort **2\n"
"SimpleSelectSort **3\n"
"HeapSort **********4\n"
"BubbleSort ********5\n"
"QuickSort *********6\n"
"MergeSort *********7\n");
scanf("%d",&choose);
switch(choose){
case 1:
InsertSort(a,n);break;
case 2:
BinaryInsertSort(a,n);break;
case 3:
SimpleSelectSort(a,n);break;
case 4:
HeapSort(a,n);break;
case 5:
BubbleSort(a,n);break;
case 6:
QuickSort(a,1,n);break;
case 7:
MergeSort(a,1,n);break;
default :break;
}
printf("the result of sort is:\n");
for(i=1;i<n+1;i++){
printf("%d ",a[i]);
}
return 0;
}
简单选择排序
void SimpleSelectSort(int a[],int n)
{
int i,j,min;
for(i=1;i<n;i++){
a[0]=a[i];
for(j=i;j<n+1;j++){
if(a[j]<a[0]){
a[0]=a[j];
a[j]=a[i];
a[i]=a[0];
}
}
}
}
快速排序
void QuickSort(int a[],int low,int high)
{
int i=low,j=high;
if(low<high){
a[0]=a[low];
while(i<j){
while(i<j&&a[j]>=a[0])
--j;
if(i<j){
a[i]=a[j];
++i;
}
while(i<j&&a[i]<a[0])
++i;
if(i<j){
a[j]=a[i];
--j;
}
}
a[i]=a[0];
QuickSort(a,low,i-1);
QuickSort(a,i+1,high);
}
}
直接插入排序
void InsertSort(int a[],int n)
{
int i,j;
for(i=2;i<n+1;i++){
if(a[i]<a[i-1]){
a[0]=a[i];
for(j=i-1;a[0]<a[j];j--){
a[j+1]=a[j];
}
a[j+1]=a[0];
}
}
}
折半插入排序
void BinaryInsertSort(int a[],int n)
{
int i,j,low,high,mid;
for(i=2;i<n+1;i++){
a[0]=a[i];
low=1;
high=i-1;
while(low<=high){
mid=(low+high)/2;
if(a[0]>a[mid]){
low=mid+1;
}else {
high=mid-1;
}
}
for(j=i-1;j>high;j--){
a[j+1]=a[j];
}
a[high+1]=a[0];
}
}
冒泡排序
void BubbleSort(int a[],int n)
{
int i,j,flag=0;
for(i=0;i<n;i++){
flag=0;
for(j=n;j>i;j--){
if(a[j]>a[j+1]){
a[0]=a[j];
a[j]=a[j+1];
a[j+1]=a[0];
flag=1;
}
}
if(flag=0){
return ;
}
}
}
堆排序
void Heapadjust(int a[],int n,int k){
a[0]=a[k];
int i;
for(i=2*k;i<n+1;i*=2){
if(i<n&&a[i]<a[i+1])
i++;
if(a[0]>=a[i])
break;
else{
a[k]=a[i];
k=i;
}
}
a[k]=a[0];
}
void BuildHeap(int a[],int n)
{
int i;
for(i=(n/2);i>0;i--){
Heapadjust(a,n,i);
}
}
void HeapSort(int a[],int n)
{
int temp,i;
BuildHeap(a,n);
for(i=n;i>0;i--){
temp=a[1];
a[1]=a[i];
a[i]=temp;
Heapadjust(a,i-1,1);
}
}
二路归并排序
void Merge(int a[],int low,int mid,int high)
{
int b[high+1];
int i,j;
for(i=1;i<high+1;i++){
b[i]=a[i];
}
for(i=low,j=mid+1;i<=mid&&j<=high;)
{
if(b[i]<=b[j]){
a[low++]=b[i++];
}else{
a[low++]=b[j++];
}
}
while(i<=mid){
a[low++]=b[i++];
}
while(j<=high){
a[low++]=b[j++];
}
}
void MergeSort(int a[],int low,int high)
{
int mid;
if(low<high){
mid=(low+high)/2;
MergeSort(a,low,mid);
MergeSort(a,mid+1,high);
Merge(a,low,mid,high);
}
}