1、排序算法多种算法实现插入 堆 希尔 快排#include #include #include /实现简单选择排序、直接插入排序和冒泡排序void SelectSort() int m,t; int a=8,2,4,3,6,n=5; for(int i=0;in;i+) int min=ai; for(int j=i+1;jaj) min=aj; m=j; if(ai!=min) t=ai; ai=am; am=t; /打印 for(i=0;in;i+) printf(%d ,ai); printf(n);/实现简单的数组的插入排序/void inserssort() int x; int a=
2、2,3,4,6,8,n=5; printf(请输入要插入的数据n); scanf(%d,&x); int tem=x; for(int i=0;iaiξj-) aj+1=aj; ai+1=tem; for(i=0;in+1;i+) printf(%d ,ai); printf(n); /实现简单的数组的冒泡排序/void maopao() /冒泡 int a=8,2,4,3,6,n=5; int i,j,temp; for(i=1;in;i+) for(j=0;jaj+1) temp=aj; aj=aj+1; aj+1=temp; for(i=0;i0) for(i=Gap;i=0) i
3、f(ajaj+Gap) temp=aj; aj=aj+Gap; aj+Gap=temp; j=j-Gap; else break; Gap/=2; for(i=0;in;i+) printf(%d ,ai); printf(n);/快速排序实现int partition(int n,int left,int right); /partition函数的声明int m=5; /(自定义简单的数组的长度)void Swap(int *i,int *j) int *temp; temp=i; i=j; j=temp;void quicksort(int n, int left,int right) i
4、nt dp; if (leftright) dp=partition(n,left,right); quicksort(n,left,dp-1); quicksort(n,dp+1,right); /这两个就是递归调用,分别整理53左边的数组和右边的数组 int partition(int n,int left,int right) int lo,hi,pivot,t; pivot=nleft; lo=left-1; hi=right+1; while(lo+1!=hi) if(nlo+1pivot) hi-; else t=nlo+1; n+lo=nhi-1; n-hi=t; nleft=n
5、lo; nlo=pivot; return lo;/堆排序的简单数组实现void HeapAdjust(int array, int i, int nLength) int nChild, nTemp; for (nTemp = arrayi; 2 * i + 1 arraynChild) +nChild; / 如果较大的子结点大于父结点那么把较大的子结点往上移动,替换它的父结点 if (nTemp= 0; -i) HeapAdjust(array, i, length); / 从最后一个元素开始对序列进行调整,不断的缩小调整的范围直到第一个元素 for (i=length - 1; i 0;
6、 -i) / 把第一个元素和当前的最后一个元素交换, / 保证当前的最后一个位置的元素都是在现在的这个序列之中最大的 Swap(&array0, &arrayi); / 不断缩小调整heap的范围,每一次调整完毕保证第一个元素是当前序列的最大值 HeapAdjust(array, 0, i); /输出数组void print(int b) for(int i=0;idata=NULL; p-next=NULL; L=p;void insertlist(linklist &L) linklist p; int as; p=L; printf(请输入链表的的元素,输入以#为结束n); while(
7、scanf(%d,&as)&as!=#) linklist q=(linklist)malloc(sizeof(londe); q-data=as; q-next=NULL; p-next=q; p=q; printf(链表创建成功!n); /链表创建生成完成void printlist(linklist &L) linklist p; p=L-next; while(p) printf(%d ,p-data); p=p-next; printf(n);/链表的排序操作int rtnlegth(linklist &L) /计算双向链表的长度 linklist p; int count=0; p
8、=L-next; while(p) count+; p=p-next; return(count);void listSelectSort(linklist &L) /链表的选择排序 linklist p,q,small; int temp; for(p=L-next;p-next!=NULL;p=p-next) small=p; for(q=p-next;q;q=q-next) if(q-datadata) small=q; if(small!=p) temp=p-data; p-data=small-data; small-data=temp; printf(选择排序结果如下:n); pr
9、intlist(L); printf(n); void insertlistsort(linklist &L) /链表的插入排序 linklist p; int xx; p=L-next; printf(请输入要插入的数据n); scanf(%d,&xx); linklist pp=(linklist)malloc(sizeof(londe); pp-data=xx; if(p-data=xx) pp-next=p; L=p; return; while(p-next) if(xx=p-data&p-next-data=xx) pp-next=p-next-next; p-next=pp; r
10、eturn; printf(插入排序结果如下:n); printlist(L); printf(n);void maopao(linklist &L) /链表的冒泡排序 linklist p; int tem; for(int i=1;inext; for(int j=0;jdata=p-next-data) tem=p-data; p-data=p-next-data; p-next-data=tem; p=p-next; printf(冒泡排序结果如下:n); printlist(L); printf(n);int main() int mm,nn; int b=8,2,4,3,6; li
11、nklist L; printf(请选择菜单:*n); printf(1:实现简单选择排序、直接插入排序和冒泡排序n); printf(2:实现希尔排序算法*n); printf(3:实现快速排序算法*n); printf(4:实现堆排序算法*n); printf(采用链式存储实现简单选择排序、直接插入排序和冒泡排序n); printf(5:创建一个链表输出并:*n); printf(6:链表选择排序:*n); printf(7:链表插入排序:*n); printf(8:链表冒泡排序:*n); printf(n); while(scanf(%d,&mm)!=EOF) switch(mm) ca
12、se 1: printf(1:选择排序n); printf(2:插入排序n); printf(3:冒泡排序n); while(scanf(%d,&nn)!=EOF) switch(nn) case 1: SelectSort(); break; case 2: inserssort(); break; case 3: maopao(); break; break; printf(n); break; case 2: shellsort(); printf(n); break; case 3: quicksort(b,0,4); printf(快速排序为n); print(b); break;
13、case 4: printf(堆排序为n); HeapAdjust(b,1,5); print(b); break; case 5: createlist(L); insertlist(L); break; case 6: listSelectSort(L); break; case 7: insertlistsort(L); break; case 8: maopao(L); break; printf(n); printf(1:实现简单选择排序、直接插入排序和冒泡排序n); printf(2:实现希尔排序算法*n); printf(3:实现快速排序算法*n); printf(4:实现堆排序算法*n); printf(采用链式存储实现简单选择排序、直接插入排序和冒泡排序n); printf(5:创建一个链表输出并:*n); printf(6:链表选择排序:*n); printf(7:链表插入排序:*n); printf(8:链表冒泡排序:*n); printf(n); return 0;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1