下面給你介紹四種常用排序演算法:
1、冒泡排序
特點:效率低,實現簡單
思想(從小到大排):每一趟將待排序序列中最大元素移到最後,剩下的為新的待排序序列,重復上述步驟直到排完所有元素。這只是冒泡排序的一種,當然也可以從後往前排。
『貳』 演算法的四種描述方法是什麼
#include<stdio.h>
#include<time.h>
#include<math.h>
#include<malloc.h>
void BubbleSort(int *L,int N)
{ //冒泡
int i,j;
int t;
for(i=1;i<=N;i++)
{
for(j=N;j>i;j--)
if(L[j]<L[j-1])
{
t=L[j];
L[j]=L[j-1];
L[j-1]=t;
}
}
}
int SelectMinKey(int *L,int N,int n)
{
int i,min=n;
for(i=n+1;i<=N;i++)
if(L[i]<L[min])
min=i;
return min;
}
void SelectSort(int *L,int N)
{ //選擇
int i,j;
int t;
for(i=1;i<N;i++)
{
j=SelectMinKey(L,N,i);
if(i!=j)
{
t=L[i];
L[i]=L[j];
L[j]=t;
}
}
}
void InsertSort(int *L,int N)
{ //插入
int i,j;
for(i=2;i<=N;i++)
{
if(L[i]<L[i-1])
{
L[0]=L[i];
L[i]=L[i-1];
for(j=i-2;L[0]<L[j];j--)
L[j+1]=L[j];
L[j+1]=L[0];
}
}
}
void ShellInsert(int *L,int N, int dk)
{ // 對順序表L作一趟希爾插入排序。本演算法對演算法10.1作了以下修改:
// 1. 前後記錄位置的增量是dk,而不是1;
// 2. r[0]只是暫存單元,不是哨兵。當j<=0時,插入位置已找到。
int i,j;
for(i=dk+1;i<=N;++i)
if(L[i]<L[i-dk])
{ // 需將L.r[i]插入有序增量子表
L[0]=L[i]; // 暫存在L.r[0]
for(j=i-dk;(j>0&&L[0]<L[j]);j-=dk)
L[j+dk]=L[j]; // 記錄後移,查找插入位置
L[j+dk]=L[0]; // 插入
}
} // ShellInsert
void ShellSt(int *L,int N, int dlta[], int t)
{ // 演算法10.5
// 按增量序列dlta[0..t-1]對順序表L作希爾排序。
for(int k=0;k<t;++k)
ShellInsert(L,N, dlta[k]); // 一趟增量為dlta[k]的插入排序
} // ShellSort
void ShellSort(int *L,int N)
{ //希爾
int t=(int)log(N);
int k,*dlta;
dlta=(int*)malloc(t*4); //產生增量序列
for(k=0;k<t;k++)
dlta[k]=(int)pow(2,t-k)-1;
ShellSt(L,N,dlta,t);
}
int main()
{
int N=250;
int i,j,k;
int t;
int ti[16];
int *L;
srand(time(NULL));
printf("長度\t|冒泡\t|選擇\t|插入\t|希爾\n");
printf("--------+-------------------------------------------------------------");
for(j=0;N<100000;j++)
{
L=(int *)malloc((N+1)*4);
t=0;
for(i=1;i<=N;i++)
L[i]=rand();
ti[t++]=clock();
BubbleSort(L,N);
ti[t++]=clock();
for(i=1;i<=N;i++)
L[i]=rand();
ti[t++]=clock();
SelectSort(L,N);
ti[t++]=clock();
for(i=1;i<=N;i++)
L[i]=rand();
ti[t++]=clock();
InsertSort(L,N);
ti[t++]=clock();
for(i=1;i<=N;i++)
L[i]=rand();
ti[t++]=clock();
ShellSort(L,N);
ti[t++]=clock();
printf("\n%d\t",N);
for(k=0;k<4;k++)
printf("| %d\t",(ti[2*k+1]-ti[2*k]));
N*=5;
}
printf("\n\n");
}
//這是我們當年學數據結構時我自己寫的,給你改了一下,輸出是對隨機產生一些數,對四種演算法進行比較,有問題可以hi我啊
另外,站長團上有產品團購,便宜有保證