int selectsort(int p[], int n);
int insertsort(int p[],int n);
int appendsort(int p[], int m, int n);
int bubblesort(int p[],int n);
int combsort(int p[], int n);
int bubblesort(int p[], int n)
{
int op=0;
int i, j;
int temp;
int flag=1;
for (j=n-1; flag>0 && j>0; j--) {
flag=0;
for (i=j; i>0; i--) {
if (p[i-1]>p) {
temp=p;
p=p[i-1];
p[i-1]=temp;
flag=1;
}
op++;
}
}
return op;
}
int selectsort(int p[], int n)
{
int op=0;
int i, j, max;
int temp;
for (j=n-1; j>0; j--) {
max=j;
temp=p[j];
for(i=j-1; i>=0; i--) {
if (p>temp) {
max=i;
temp=p;
}
op++;
}
p[max]=p[j];
p[j]=temp;
op++;
}
return op;
}
int insertsort(int p[],int n)
{
int op=0;
int i,j,temp;
for (j=1; j<n; j++) {
temp=p[j];
for(i=j-1; i>=0 && p>temp; i--) {
p[i+1]=p;
op++;
}
p[i+1]=temp;
op++;
}
return op;
}
/*
* 把小列表插入大列表中,要求大列表有序,被其他算法调用。
*/
int appendsort(int p[],
int m, /* 前半部分列表长度和后半部分列表的开始位置 */
int n)
{
int op=0;
int i,j,temp;
if (m>=n)
for(j=m; j<n; j++) {
temp=p[j];
for(i=j-1; i>=0 && p>temp; i--) {
p[i+1]=p;
op++;
}
p[i+1]=temp;
op++;
}
else
for(j=m-1; j>=0; j--) {
temp=p[j];
for(i=j-1; i>=0 && p>temp; i--) {
p[i+1]=p;
op++;
}
p[i-1]=temp;
op++;
}
return op;
}
/*
* 改进的冒泡排序算法,性能接近堆排序。
* 在 1991 年由 S. Lacey 和 R. Box 发明。
* 据说在特定的重复性输入下有可能衰退成冒泡排序。
*/
int combsort(int p[], int n)
{
int op=0;
int i;
int temp;
int gap=n;
int flag=1;
while (gap>1 || flag!=0) {
flag=0;
gap=(gap==9||gap==10)?11:gap*10/13;
if (gap==0)
gap=1;
for (i=n-1; i-gap>=0; i--) {
if (p[i-gap]>p) {
temp=p;
p=p[i-gap];
p[i-gap]=temp;
flag=1;
}
op++;
}
}
return op;
}
几种简单排序
最新推荐文章于 2022-04-27 23:04:16 发布
以下内容为程序代码: