各种内部排序算法!!
//
排序算法
// sunboy 2007.9.19
#include < iostream >
using namespace std;
#define LEN 8
void Print( int a[])
... {
int i;
for(i=0;i<LEN;i++)
cout<<a[i]<<" ";
cout<<endl;
}
void swap( int & a, int & b)
... {
int tmp;
tmp=a;
a=b;
b=tmp;
}
int Partion( int arr[], int low, int high)
... {
int tmp=arr[low];
while(low<high)
...{
while(low<high&&arr[high]>tmp)
high--;
arr[low]=arr[high];
while(low<high&&arr[low]<tmp)
low++;
arr[high]=arr[low];
}
arr[low]=tmp;
return low;
}
void QSort( int arr[], int low, int high)
... {int p;
if(low<high)
...{
p=Partion(arr,low,high);
QSort(arr,low,p-1);
QSort(arr,p+1,high);
}
} // 快速排序
void Insert_Sort( int arr[])
... {
int i,j,tmp;
for(i=1;i<LEN;i++)
...{
if(arr[i]>=arr[i-1])continue;
tmp=arr[i];
for(j=i-1;tmp<arr[j]&&j>-1;j--)
arr[j+1]=arr[j];
arr[j+1]=tmp;
}
} // 插入排序
int Min_Select( int arr[], int begin)
... {
int i,flag;
int min=0xfffffff;
for(i=begin;i<LEN;i++)
if(arr[i]<min)
...{
min=arr[i];
flag=i;
}
return flag;
}
void Bible_Sort( int arr[])
... {
int i,j;
for(i=1;i<LEN;i++)
for(j=0;j<LEN-i;j++)
...{
if(arr[j]>arr[j+1])
swap(arr[j],arr[j+1]);
}
} // 冒泡排序
void Select_Sort( int arr[])
... {
int i,j;
for(i=0;i<LEN-1;i++)
...{
j=Min_Select(arr,i);
if(i!=j)
swap(arr[i],arr[j]);
}
} // 选择排序
void Shell_Sort( int arr[])
... {
}
void Merge ( int arr[], int low, int mid, int high)
... {
int i,b[8];
int ind1=low;
int ind2=mid+1;
for(i=low;i<=high;i++)
b[i]=arr[i];
for(i=low;i<=high&&ind1<=mid&&ind2<=high;i++)
if(b[ind1]<b[ind2])
arr[i]=b[ind1++];
else
arr[i]=b[ind2++];
while(ind1<=mid)
arr[i++]=b[ind1++];
while(ind2<=high)
arr[i++]=b[ind2++];
}
void Merge_Sort( int arr[], int low, int high)
... {
int i,brr[8];
for(i=0;i<8;i++)
brr[i]=arr[i];
int mid;
if(low<high)
...{
mid=(low+high)/2;
Merge_Sort(arr,low,mid);
Merge_Sort(arr,mid+1,high);
Merge(arr,low,mid,high);
}
} // 归并排序
int main()
... {
int arr[8]=...{2,3,5,6,4,1,0,10};
//QSort(arr,0,7);
//Insert_Sort(arr);
//Bible_Sort(arr);
//Select_Sort(arr);
//Merge_Sort(arr,0,7);
Print(arr);
return 0;
}
// sunboy 2007.9.19
#include < iostream >
using namespace std;
#define LEN 8
void Print( int a[])
... {
int i;
for(i=0;i<LEN;i++)
cout<<a[i]<<" ";
cout<<endl;
}
void swap( int & a, int & b)
... {
int tmp;
tmp=a;
a=b;
b=tmp;
}
int Partion( int arr[], int low, int high)
... {
int tmp=arr[low];
while(low<high)
...{
while(low<high&&arr[high]>tmp)
high--;
arr[low]=arr[high];
while(low<high&&arr[low]<tmp)
low++;
arr[high]=arr[low];
}
arr[low]=tmp;
return low;
}
void QSort( int arr[], int low, int high)
... {int p;
if(low<high)
...{
p=Partion(arr,low,high);
QSort(arr,low,p-1);
QSort(arr,p+1,high);
}
} // 快速排序
void Insert_Sort( int arr[])
... {
int i,j,tmp;
for(i=1;i<LEN;i++)
...{
if(arr[i]>=arr[i-1])continue;
tmp=arr[i];
for(j=i-1;tmp<arr[j]&&j>-1;j--)
arr[j+1]=arr[j];
arr[j+1]=tmp;
}
} // 插入排序
int Min_Select( int arr[], int begin)
... {
int i,flag;
int min=0xfffffff;
for(i=begin;i<LEN;i++)
if(arr[i]<min)
...{
min=arr[i];
flag=i;
}
return flag;
}
void Bible_Sort( int arr[])
... {
int i,j;
for(i=1;i<LEN;i++)
for(j=0;j<LEN-i;j++)
...{
if(arr[j]>arr[j+1])
swap(arr[j],arr[j+1]);
}
} // 冒泡排序
void Select_Sort( int arr[])
... {
int i,j;
for(i=0;i<LEN-1;i++)
...{
j=Min_Select(arr,i);
if(i!=j)
swap(arr[i],arr[j]);
}
} // 选择排序
void Shell_Sort( int arr[])
... {
}
void Merge ( int arr[], int low, int mid, int high)
... {
int i,b[8];
int ind1=low;
int ind2=mid+1;
for(i=low;i<=high;i++)
b[i]=arr[i];
for(i=low;i<=high&&ind1<=mid&&ind2<=high;i++)
if(b[ind1]<b[ind2])
arr[i]=b[ind1++];
else
arr[i]=b[ind2++];
while(ind1<=mid)
arr[i++]=b[ind1++];
while(ind2<=high)
arr[i++]=b[ind2++];
}
void Merge_Sort( int arr[], int low, int high)
... {
int i,brr[8];
for(i=0;i<8;i++)
brr[i]=arr[i];
int mid;
if(low<high)
...{
mid=(low+high)/2;
Merge_Sort(arr,low,mid);
Merge_Sort(arr,mid+1,high);
Merge(arr,low,mid,high);
}
} // 归并排序
int main()
... {
int arr[8]=...{2,3,5,6,4,1,0,10};
//QSort(arr,0,7);
//Insert_Sort(arr);
//Bible_Sort(arr);
//Select_Sort(arr);
//Merge_Sort(arr,0,7);
Print(arr);
return 0;
}