常见排序
发布于:2016-10-18 17:46
#include<stdio.h>
/*冒泡排序*/
void bubble(int *a,int n) /*定义两个参数:数组首地址与数组大小*/
{
int i,j,temp;
for(i = 0;i < n - 1;i++)
for(j = i + 1;j < n;j++) /*注意循环的上下限*/
if(a[i] > a[j])
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
/*选择排序*/
void choise(int *a,int n)
{
int i,j,k,temp;
for(i = 0;i < n - 1;i++)
{
k = i; /*给记号赋值*/
for(j = i + 1;j < n;j++)
if(a[k] > a[j])
k = j;/*k总是指向最小元素*/
if(i != k)
{
/*当k!=i时才交换,否则a[i]即为最小*/
temp = a[i];
a[i] = a[k];
a[k] = temp;
}
}
}
/*快速排序*/
void quick(int * a,int i,int j)
{
int m,n,temp;
int k;
m = i;
n = j;
k = a[(i + j) / 2];/*选取的参照*/
do
{
while(a[m] < k && m < j);
m++; /* 从左到右找比k大的元素*/
while(a[n] > k && n > i);
n--;/* 从右到左找比k小的元素*/
if(m <= n)
{
/*若找到且满足条件,则交换*/
temp = a[m];
a[m] = a[n];
a[n] = temp;
m++;
n--;
}
}
while(m <= n)
if(m < j)
quick(a,m,j);
if(n > i)
quick(a,i,n);
}
/*插入排序*/
void insert(int * a,int n)
{
int i,j,temp;
for(i = 1;i < n;i++)
{
temp = a[i];/*temp为要插入的元素*/
j = i - 1;
while(j >= 0 && temp < a[j])
{
/*从a[i-1]开始找比a[i]小的数,同时把数组元素向后移*/
a[j + 1] = a[j]
j--;
}
a[j + 1] = temp;/*插入*/
}
}
/*希尔排序*/
void shell(int * a,int n)
{
int i,j,k,x;
k = n / 2;/*间距值*/
while(k >= 1)
{
for(i = k;i < n;i++)
{
x = a[i];
j = i - k;
while(j >= 0 && x < a[j])
{
a[j + k] = a[j];
j -= k;
}
a[j + k] = x;
}
k /= 2;/*缩小间距值*/
}
}
void print(int * a,int n)
{
int i;
for(i = 0;i < n;i++)
printf("%5d",a[i]);
printf("
");
}
int main()
{
int a1[] = {13,0,5,8,1,7,21,50,9,2};
int a2[] = {13,0,5,8,1,7,21,50,9,2};
int a3[] = {13,0,5,8,1,7,21,50,9,2};
int a4[] = {13,0,5,8,1,7,21,50,9,2};
int a5[] = {13,0,5,8,1,7,21,50,9,2};
printf("The original list:");
print(a1,10);
printf("According to bubble:");
bubble(a1,10);
print(a1;10);
printf("According to choise:");
choise(a2,10);
print(a2,10);
printf("According to quick:");
quick(a3,0,9);
print(a3,10);
printf("According to insert:");
insert(a4,10);
print(a4,10);
printf("According to shell:");
shell(a5,10);
print(a5,10);
}
0
今日新帖
0
昨日新帖
5
帖子总数
感觉好厉害厉害啊 可以收藏了 分享给我的小伙伴们看吗 真棒
。。。厉害啊
加油!虽然我看不懂,但是我来给你顶顶帖子
这是常见的排序方法,写得不错,但记得要记得原理。加油....
加油,要记得理解他,多多练习。
这代码写得不错,我一眼就看出我看不懂.
回复:常见排序