排序
来源:互联网 发布:java根据ip得到城市 编辑:程序博客网 时间:2024/05/01 17:30
归并排序:
#include<stdio.h>
#include<stdlib.h>
void display(int d[],int n)
{
int i;
for(i=0;i<n;i++)
printf("%d/t",d[i]);
printf("/n");
}
void merge(int u[],int v[],int w[],int m,int n)
{
int i,j,k;
i=j=k=0;
while(i<m&&j<n)
if(u[i]<v[j])
w[k++]=u[i++];
else w[k++]=v[j++];
while(i<m) w[k++]=u[i++];
while(j<n) w[k++]=v[j++];
}
void merge_sort(int key[],int m)
{
int j,k,pow,t[128];
for(pow=1;pow<m;pow*=2)
;
if(m<pow){
printf("n wrong!/n");
exit(1);
}
for(k=1;k<m;k*=2)
{
for(j=0;j<m-k;j+=2*k)
merge(key+j,key+j+k,t+j,k,k);
for(j=0;j<m;j++)
key[j]=t[j];
display(key,m);
}
}
void main()
{
int x[]={1,56,23,12,10,-23,78,25,68,85,0,53,64,97,298,123};
int n;
n=sizeof(x)/sizeof(int);
printf("before sort.../n");
display(x,n);
printf("sorting.../n");
merge_sort(x,n);
printf("after sort.../n");
display(x,n);
getchar();
}
shell排序:
#include<stdio.h>
#include<stdlib.h>
void shellsort(int a[],int n)
{
int gap,i,j,temp;
for(gap=n/2;gap>0;gap/=2)
{
for(i=gap;i<n;i++)
for(j=i-gap;j>=0&&a[j]>a[j+gap];j-=gap)
{
temp=a[j];
a[j]=a[j+gap];
a[j+gap]=temp;
}
}
}
void main()
{
int i;
int a[10]={12,9,8,-2,0,56,2,89,13,55};
shellsort(a,10);
for(i=0;i<10;i++)
printf("%d/t",a[i]);
printf("/n");
getchar();
}
quicksort:
#include<stdio.h>
#include<stdlib.h>
int partition(int a[],int low,int high)
{
int pivo=a[low];
while(low<high){
while(low<high&&a[high]>=pivo)
--high;
a[low]=a[high];
while(low<high&&a[low]<pivo)
++low;
a[high]=a[low];
}
a[low]=pivo;
return low;
}
void qqsort(int a[],int low,int high)
{
int pivo;
if(low<high)
{
pivo=partition(a,low,high);
qqsort(a,low,pivo-1);
qqsort(a,pivo+1,high);
}
}
void quicksort(int a[],int n)
{
qqsort(a,0,n);
}
void main()
{
int i;
int a[11]={0,123,53,234,78,5,6,12,52,75,9};
quicksort(a,10);
for(i=0;i<11;i++)
printf("%d/t",a[i]);
printf("/n");
getchar();
}
归并排序:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void display(int x[], int n)
{
int i;
for(i = 0; i < n; i++)
printf("%d\t", x[i]);
printf("\n");
}
void merge(int x[], int first, int mid, int last)
{
int j, k;
int begin1 = first;
int end1 = mid;
int begin2 = mid + 1;
int end2 = last;
int *tmp = (int *)malloc((last - first + 1) * sizeof(int));
for(k = 0; begin1 <= end1 && begin2 <= end2; k++) {
if(x[begin1] <= x[begin2])
tmp[k] = x[begin1++];
else
tmp[k] = x[begin2++];
}
if(begin1 <= end1)
memcpy(tmp + k, x + begin1, (end1 - begin1 + 1) * sizeof(int));
if(begin2 <= end2)
memcpy(tmp + k, x + begin2, (end2 - begin2 + 1) * sizeof(int));
memcpy(x + first, tmp, (last - first + 1) * sizeof(int));
free(tmp);
}
void merge_sort(int x[], int first, int last)
{
int mid = 0;
if(first < last) {
mid = (first + last) / 2;
merge_sort(x, first, mid);
merge_sort(x, mid + 1, last);
merge(x, first, mid, last);
}
}
void main()
{
int x[] = {1,56,23,12,10,-23};
int n;
n = sizeof(x)/sizeof(int);
printf("before sort...\n");
display(x, n);
printf("sorting...\n");
merge_sort(x, 0, n - 1);
printf("after sort...\n");
display(x, n);
}
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- VirtualBox 共享文件夹设置
- 求线性方程组的解
- crontab中的环境变量问题
- 在tomcat中配置JNDI数据源
- 用家常话,聊聊一些费解的AOP概念
- 排序
- 软件测试自动化的纠结
- RWT Theming in RAP(RAP主题Theme设置)
- CSS模块化设计——从空格谈起
- Servlet接收JSP参数乱码问题解决办法(转)
- const 在C C++ 中的使用 和 区别-----------整理自网络
- Windows 95诞生15周年:微软告别巅峰
- 几个需要引起注意的面试题
- linux程序的执行学习