冒泡
#include <stdio.h>
void myswap(int *a,int i,int j)
{
int temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
}
void mysort1(int *a,int len)
{
if (len == 1)
return;
int i;
for (i = 0;i < len-1;i++)
{
if (a[i] > a[i+1])
myswap(a,i,i+1);
}
mysort1(a,len-1);
}
void mysort2(int *a,int len)
{
int i,j;
for (i = 0;i < len;i++)
{
for (j = 0;j < len-1-i;j++)
{
if (a[j] > a[j+1])
myswap(a,j,j+1);
}
}
}
void myprint(int *a,int len)
{
int i;
for (i = 0;i < len;i++)
printf ("%4d",a[i]);
printf("\n");
}
int main()
{
int a[] = {9,8,7,6,5,4,3,2,1,0};
int len = sizeof(a)/sizeof(int);
mysort1(a,len);
myprint(a,len);
mysort2(a,len);
myprint(a,len);
return 0;
}
冒泡鸡尾酒
#include <stdio.h>
void myswap(int *a,int i,int j)
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
void mysort(int *a,int len)
{
int i,j;
for (i = 0;i < len;i++)
{
int min = i;
for (j = i+1;j < len;j++)
{
if (a[min] > a[j])
min = j;
}
if (a[min] != a[i])
myswap (a,min,i);
}
}
void myprint(int *a,int len)
{
int i;
for (i = 0;i < len;i++)
printf ("%4d",a[i]);
printf("\n");
}
int main()
{
int a[] = {9,8,7,6,5,4,3,2,1,0};
int len = sizeof(a)/sizeof(int);
mysort(a,0,len-1);
myprint(a,len);
return 0;
}
插入排序
#include <stdio.h>
void myswap(int *a,int i,int j)
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
void mysort(int *a,int len)
{
int i;
for (i = 1;i < len;i++)
{
int get = a[i];
int j = i-1;
while (j >= 0 && a[j] > get)
{
a[j+1] = a[j];
j--;
}
a[j+1] = get;
}
}
void myprint(int *a,int len)
{
int i;
for (i = 0;i < len;i++)
printf ("%4d",a[i]);
printf("\n");
}
int main()
{
int a[] = {9,8,7,6,5,4,3,2,1,0};
int len = sizeof(a)/sizeof(int);
mysort(a,len);
myprint(a,len);
return 0;
}
二分插入
#include <stdio.h>
void myswap(int *a,int i,int j)
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
void mysort(int *a,int len)
{
int i;
for (i = 1;i < len;i++)
{
int get = a[i];
int left = 0;
int right = i - 1;
while (left <= right)
{
int mid = (left + right)/2;
if (a[mid] > get)
right = mid - 1;
if (a[mid] < get)
left = mid + 1;
}
int j;
for (j = i-1;j >= left;j--)
{
a[j+1] = a[j];
}
a[left] = get;
}
}
void myprint(int *a,int len)
{
int i;
for (i = 0;i < len;i++)
printf ("%4d",a[i]);
printf("\n");
}
int main()
{
int a[] = {9,8,7,6,46,5,4,25,3,2,1,0};
int len = sizeof(a)/sizeof(int);
mysort(a,len);
myprint(a,len);
return 0;
}
希尔
#include <stdio.h>
void myswap(int *a,int i,int j)
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
void mysort(int *a,int len)
{
int gap = 1;
while (gap < len)
{
gap = gap*5+1;
}
int i;
while (gap > 0)
{
for (i = gap;i < len;i++)
{
int get = a[i];
int j = i-gap;
while (j >= 0 && a[j] > get)
{
a[j+gap] = a[j];
j -= gap;
}
a[j+gap] = get;
}
gap = gap/5;
}
}
void myprint(int *a,int len)
{
int i;
for (i = 0;i < len;i++)
printf ("%4d",a[i]);
printf("\n");
}
int main()
{
int a[] = {9,8,7,6,5,4,3,2,1,0};
int len = sizeof(a)/sizeof(int);
mysort(a,len);
myprint(a,len);
return 0;
}
堆
#include <stdio.h>
void myswap(int *a,int i,int j)
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
void heapify(int *a,int index,int len)
{
int lchild = 2*index+1;
int rchild = 2*index+2;
int max = index;
if (lchild < len && a[max] < a[lchild])
max = lchild;
if (rchild < len && a[max] < a[rchild])
max = rchild;
if (max != index)
{
myswap(a,max,index);
heapify(a,max,len);
}
}
void mysort(int *a,int len)
{
//建堆
int i;
for (i = len/2-1;i >= 0;i--)
{
heapify(a,i,len);
}
//排序
int count = len;
for (i = len-1;i >= 0;i--)
{
myswap(a,0,i);
count--;
heapify(a,0,count);
}
}
void myprint(int *a,int len)
{
int i;
for (i = 0;i < len;i++)
printf ("%4d",a[i]);
printf("\n");
}
int main()
{
int a[] = {9,8,7,6,5,4,3,2,1,0};
int len = sizeof(a)/sizeof(int);
mysort(a,len);
myprint(a,len);
return 0;
}
归并
#include <stdio.h>
void myswap(int *a,int i,int j)
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
void merge(int *a,int left,int mid,int right,int *temp)
{
int i = left;//左半部
int j = mid+1;//右半部
int k = 0;
while (i <= mid && j <= right)
{
if (a[i] < a[j])
temp[k++] = a[i++];
else
temp[k++] = a[j++];
}
while (i <= mid)
{
temp[k++] = a[i++];
}
while (j <= right)
{
temp[k++] = a[j++];
}
for (i = 0;i < k;i++)
{
a[left+i] = temp[i];
}
}
void mergemysort(int *a,int left,int right,int *temp)
{
int mid = (left + right)/2;
if (left < right)
{
mergemysort(a,left,mid,temp);//对左边归并
mergemysort(a,mid+1,right,temp);//对右边归并
merge(a,left,mid,right,temp);//合并
}
}
void myprint(int *a,int len)
{
int i;
for (i = 0;i < len;i++)
printf ("%4d",a[i]);
printf("\n");
}
int main()
{
int a[] = {9,8,7,6,5,4,3,2,1,0};
int len = sizeof(a)/sizeof(int);
int temp[10];
mergemysort(a,0,len-1,temp);
myprint(a,len);
return 0;
}
快速
#include <stdio.h>
void myswap(int *a,int i,int j)
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
int patien(int *a,int left,int right)
{
int point = a[right];
while (left < right)
{
while(a[left] < point && left < right)
{
left++;
}
if (left < right)
{
a[right] = a[left];
right--;
}
while (a[right] > point && left < right)
{
right--;
}
if (left < right)
{
a[left] = a[right];
left++;
}
}
a[left] = point;
return left;
}
void quickmysort(int *a,int left,int right)
{
if (left < right)
{
int point = patien(a,left,right);
quickmysort(a,left,point-1);
quickmysort(a,point+1,right);
}
}
void myprint(int *a,int len)
{
int i;
for (i = 0;i < len;i++)
printf ("%4d",a[i]);
printf("\n");
}
int main()
{
int a[] = {8,7,5,4,3,2,1,0,10,9,6,7};
int len = sizeof(a)/sizeof(int);
quickmysort(a,0,len-1);
myprint(a,len);
return 0;
}
排序
最新推荐文章于 2024-05-03 16:05:08 发布