排序算法
2016-07-28 21:35
453 查看
1.冒泡排序
2.插入排序
3.希尔排序(改进简单插入排序,每次交换相隔一定距离的元素),希尔排序是不稳定排序
4.堆排序
5.归并排序
6.快速排序
利用qsort函数
2.插入排序
3.希尔排序(改进简单插入排序,每次交换相隔一定距离的元素),希尔排序是不稳定排序
void shellsort(int A[],int N,int incre[],int M) { int i,j,k,l,increment,temp; for(i=0;i<M;i++) { increment=incre[i]; for(j=increment;j<N;j=j++) { temp=A[j]; for(k=j;k-increment>=0;k=k-increment) { if(temp>=A[k-increment]) break; else A[k]=A[k-increment]; } A[k]=temp; } printf("第%d次排序:",i); for(l=0;l<N;l++) printf("%d ",A[l]); printf("\n"); } }
4.堆排序
void Swap( ElementType *a, ElementType *b ) { ElementType t = *a; *a = *b; *b = t; } void PercDown( ElementType A[], int p, int N ) { /* 改编代码4.24的PercDown( MaxHeap H, int p ) */ /* 将N个元素的数组中以A[p]为根的子堆调整为最大堆 */ int Parent, Child; ElementType X; X = A[p]; /* 取出根结点存放的值 */ for( Parent=p; (Parent*2+1)<N; Parent=Child ) { Child = Parent * 2 + 1; if( (Child!=N-1) && (A[Child]<A[Child+1]) ) Child++; /* Child指向左右子结点的较大者 */ if( X >= A[Child] ) break; /* 找到了合适位置 */ else /* 下滤X */ A[Parent] = A[Child]; } A[Parent] = X; } void HeapSort( ElementType A[], int N ) { /* 堆排序 */ int i; for ( i=N/2-1; i>=0; i-- )/* 建立最大堆 */ PercDown( A, i, N ); for ( i=N-1; i>0; i-- ) { /* 删除最大堆顶 */ Swap( &A[0], &A[i] ); /* 见代码7.1 */ PercDown( A, 0, i ); } }
5.归并排序
6.快速排序
利用qsort函数
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 在命令行用 sort 进行排序
- 如何写好 C main 函数
- 文件遍历排序函数
- 关于C#中排序函数的总结
- C#选择排序法实例分析
- C#插入法排序算法实例分析
- Lua和C语言的交互详解
- C#实现Datatable排序的方法
- MYSQL必知必会读书笔记第五章之排序检索数据
- SQLSERVER的排序问题结果不是想要的
- Ruby实现插入排序算法及进阶的二路插入排序代码示例
- Windows Powershell排序和分组管道结果
- C#通过IComparable实现ListT.sort()排序
- C#选择法排序实例分析
- SQL学习笔记四 聚合函数、排序方法
- C#对list列表进行随机排序的方法
- jQuery拖动元素并对元素进行重新排序
- 将MySQL查询结果按值排序的简要教程
- 深入解析桶排序算法及Node.js上JavaScript的代码实现