1.冒泡排序
void bubble(Item a[],int n){
for(int i=n;i>1;i--)
for(int j=0;j<i-1;j++)
if(a[j]>a[j+1])
swap(a[j],a[j+1]);
}
改进的冒泡排序:
void bubble_Modified(Item a[],int n){
int flag=1;
for(int i=n;i>1&&flag;i--){
flag=0;
for(int j=0;j<i-1;j++)
if(a[j]>a[j+1])
{
flag=1;
swap(a[j],a[j+1]);
}
}
}
2.插入排序
void insertion(Item a[],int n){
int i,j;
Item temp;
for(i=1;i<n;i++){
temp=a[i];
j=i-1;
while(temp<a[j]&&j>=0){
a[j+1]=a[j];
j--;
}
a[j+1]=temp;
}
}
3.二分插入查找排序
void Binary_InsertionSort(Item a[],int n){
int i,j,k;
Item temp;
for(i=1;i<n;i++){
temp=a[i];
int left=0,right=i-1,mid;
while(left<=right){
mid=(left+right)/2;
if(temp>a[mid]){
left=mid+1;
}
else{
right=mid-1;
}
}
for(k=i-1;k>=left;k--){
a[k+1]=a[k];
}
a[left]=temp;
}
}
4.希尔排序
void ShellSort(Item a[],int n){
for(int dk=n/2;dk>=1;dk/=2)
for(int i=dk+1;i<=n;++i){
if(a[i]<a[i-dk]){
a[0]=a[i];
for(int j=i-dk;j>0&&a[0]<a[j];j-=dk)
a[j+dk]=a[j];
a[j+dk]=a[0];
}
}
}
5.选择排序
void selection(Item a[],int n){
int i,j,k;
for(i=0;i<n-1;i++){
for(k=i,j=i+1;j<n;j++){
if(a[j]<a[k])k=j;
}if(k!=i){
Item temp;
temp=a[i];
a[i]=a[k];
a[k]=temp;
}
}
}
6.快速排序
void QuickSort(Item a[],int low,int high){
if(low<high){
int pivotpos=Partition(a,low,high);
QuickSort(a,low,pivotpos-1);
QuickSort(a,pivotpos+1,high);
}
}
int Partition(Item a[],int low,int high){
Item pivot=a[low];
while(low<high){
while(low<high&&pivot<=a[high])--high;
a[low]=a[high];
while(low<high&&pivot>=a[low])++low;
a[high]=a[low];
}
a[low]=pivot;
return low;
}
7.归并排序
void MergeSort(Item a[],int low,int high){
if(low<high){
int mid=(low+high)/2;
MergeSort(a,low,mid);
MergeSort(a,mid+1,high);
Merge(a,low,mid,high);
}
}
Item *b=(Item *)malloc(sizeof(Item)*(n+1));
void Merge(Item a[],int low,int mid,int high){
for(int i=low;i<=high;i++)
b[i]=a[i];
for(int k=low,int j=mid+1,i=low;k<=mid&&j<=high;){
if(b[k]<=b[j])a[i++]=b[k++];
else a[i++]=b[j++];
}
while(k<=mid)a[i++]=b[k++];
while(j<=high)a[i++]=b[j++];
}