最近在複習各種內部排序演算法,照著書上的偽**敲了一遍,排序演算法實現本來不難,主要理解每種演算法的思路和複雜度以及穩定性。
源**
#include
#include
#define n 150
#include
void
insertsort
(int a)
a[j+1]
=a[0];
}}void
shellsort
(int a)
a[j+dk]
=a[0];
}}}void
bubblesort
(int a)
}if(flag==0)
break;}
}int
partition
(int a,
int low,
int high)
a[low]
=p;return low;
}void
quicksort
(int a,
int low,
int high)
}void
selectsort
(int a)
if(m!=i)}}
void
adjustdown
(int a,
int k,
int len)
} a[k]
=a[0];
}void
buildmaxheap
(int a)
void
heapsort
(int a)
}void
merge
(int a,
int low,
int mid,
int high)
for(i=low,j=mid+
1,k=i;i<=mid&&j<=high;k++
)while
(i<=mid)a[k++
]=b[i++];
while
(j<=high)a[k++
]=b[j++];
}void
mergesort
(int a,
int low,
int high)
}void
judge
(int a)
}if(flag==0)
else
}int
main()
printf
("\n");
for(i=
0;i<
115;i++
)printf
("*");
printf
("\n\n");
insertsort
(b);
shellsort
(c);
bubblesort
(d);
quicksort
(e,1
,n);
selectsort
(f);
heapsort
(g);
mergesort
(h,1
,n);
printf
("直接插入排序如下:\n");
for(i=
1;i<=n;i++
)judge
(b);
printf
("\n");
printf
("希爾排序如下:\n");
for(i=
1;i<=n;i++
)judge
(c);
printf
("\n");
printf
("氣泡排序如下:\n");
for(i=
1;i<=n;i++
)judge
(d);
printf
("\n");
printf
("快速排序如下:\n");
for(i=
1;i<=n;i++
)judge
(e);
printf
("\n");
printf
("選擇排序如下:\n");
for(i=
1;i<=n;i++
)judge
(f);
printf
("\n");
printf
("堆排序如下:\n");
for(i=
1;i<=n;i++
)judge
(g);
printf
("\n");
printf
("歸併排序如下:\n");
for(i=
1;i<=n;i++
)judge
(h);
printf
("\n");
return0;
}
內部排序彙總
直接插入排序 直接插入排序 void insertsort int a,int n if flag false 快速排序 參考之前文章 快速排序 一趟快速排序,劃分 int partition int a,int low,int high else a start a 0 被篩選結點的值放入最終位置...
內部排序演算法彙總
3.快速排序 4.選擇排序 5.歸併排序o nlogn 6.桶排序 7.各個排序演算法比較 大部分演算法中,待排記錄的資料型別設為 define maxsize 20 乙個用作示例的小順序表的最大長度 typedef int keytype 定義關鍵字型別為整數型別 typedef struct r...
九大內部排序彙總
插入排序 名稱 穩定性時間複雜度 空間複雜度 直接插入排序 穩定o n2 o 1 折半插入排序 穩定o n2 o 1 希爾排序 不穩定o n2 特定n n1.3 o 1 交換排序 名稱 穩定性時間複雜度 空間複雜度 氣泡排序 穩定o n2 o 1 快速排序 不穩定o n2 o n 平均o nlog2...