日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

_DataStructure_C_Impl:SeqListBasedSort

發(fā)布時(shí)間:2025/5/22 编程问答 83 豆豆
生活随笔 收集整理的這篇文章主要介紹了 _DataStructure_C_Impl:SeqListBasedSort 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
// _DataStructure_C_Impl:Sort #include<stdio.h> #include<stdlib.h> #define MaxSize 50 typedef int KeyType; //數(shù)據(jù)元素類型定義 typedef struct{KeyType key; //keyword }DataType; //順序表類型定義 typedef struct{DataType data[MaxSize];int length; }SqList; //--------------------------------------------- //直接插入排序 void InsertSort(SqList *L){int i,j;DataType t;for(i=1;i<L->length;i++){ //前i個(gè)元素已經(jīng)有序,從第i+1個(gè)元素開始與前i個(gè)的有序的keyword比較t=L->data[i+1]; //取出當(dāng)前待排序的元素j=i;while(j>-1&&t.key<L->data[j].key){ //找當(dāng)前元素的合適位置L->data[j+1]=L->data[j];j--;}L->data[j+1]=t; //將當(dāng)前元素插入合適的位置} } //--------------------------------------------- //折半插入排序 void BinInsertSort(SqList *L){int i,j,mid,low,high;DataType t;for(i=1;i<L->length;i++){ //前i個(gè)元素已經(jīng)有序,從第i+1個(gè)元素開始與前i個(gè)的有序的keyword比較t=L->data[i+1]; //取出第i+1個(gè)元素。即待排序的元素low=1;high=i;while(low<=high){ //利用折半查找思想尋找當(dāng)前元素的合適位置mid=(low+high)/2;if(L->data[mid].key>t.key)high=mid-1;elselow=mid+1;}for(j=i;j>=low;j--) //移動(dòng)元素,空出要插入的位置L->data[j+1]=L->data[j];L->data[low]=t; //將當(dāng)前元素插入合適的位置} } //--------------------------------------------- //對(duì)順序表L進(jìn)行一次希爾排序,delta是增量 void ShellInsert(SqList *L,int delta){int i,j;DataType t;for(i=delta+1;i<=L->length;i++){ //將距離為delta的元素作為一個(gè)子序列進(jìn)行排序if(L->data[i].key<L->data[i-delta].key){ //假設(shè)后者小于前者,則須要移動(dòng)元素t=L->data[i];for(j=i-delta;j>0&&t.key<L->data[j].key;j=j-delta)L->data[j+delta]=L->data[j];L->data[j+delta]=t; //依次將元素插入到正確的位置}} } //希爾排序。每次調(diào)用算法ShellInsert,delta是存放增量的數(shù)組 void ShellInsertSort(SqList *L,int delta[],int m){int i;for(i=0;i<m;i++) //進(jìn)行m次希爾插入排序ShellInsert(L,delta[i]); } void ShellInsertSort2(SqList *L,int gap){while(gap>0){ShellInsert(L,gap);gap/=2;} } //--------------------------------------------- //簡(jiǎn)單選擇排序 void SelectSort(SqList *L,int n){int i,j,k;DataType t;//將第i個(gè)元素的keyword與后面[i+1...n]個(gè)元素的keyword比較,將keyword最小的的元素放在第i個(gè)位置for(i=1;i<=n-1;i++){k=i;for(j=i+1;j<=n;j++) //keyword最小的元素的序號(hào)為kif(L->data[j].key<L->data[k].key)k=j;if(k!=i){ //假設(shè)序號(hào)i不等于k,則須要將序號(hào)i和序號(hào)k的元素交換t=L->data[i];L->data[i]=L->data[k];L->data[k]=t;}} } //--------------------------------------------- //調(diào)整H.data[s...m]的keyword,使其成為一個(gè)大頂堆 void AdjustHeap(SqList *H,int s,int m){DataType t;int j;t=(*H).data[s]; //將根結(jié)點(diǎn)臨時(shí)保存在t中for(j=2*s;j<=m;j*=2){ if(j<m&&(*H).data[j].key<(*H).data[j+1].key) //沿keyword較大的孩子結(jié)點(diǎn)向下篩選j++; //j為keyword較大的結(jié)點(diǎn)的下標(biāo)if(t.key>(*H).data[j].key) //假設(shè)孩子結(jié)點(diǎn)的值小于根結(jié)點(diǎn)的值,則不進(jìn)行交換break;(*H).data[s]=(*H).data[j];s=j;}(*H).data[s]=t; //將根結(jié)點(diǎn)的值插入到正確位置 } //建立大頂堆 void CreateHeap(SqList *H,int n){int i;for(i=n/2;i>=1;i--) //從序號(hào)n/2開始建立大頂堆AdjustHeap(H,i,n); } //對(duì)順序表H進(jìn)行堆排序 void HeapSort(SqList *H){DataType t;int i;CreateHeap(H,H->length); //創(chuàng)建堆for(i=(*H).length;i>1;i--){ //將堆頂元素與最后一個(gè)元素交換。又一次調(diào)整堆t=(*H).data[1];(*H).data[1]=(*H).data[i];(*H).data[i]=t;AdjustHeap(H,1,i-1); //將(*H).data[1..i-1]調(diào)整為大頂堆} } //--------------------------------------------- //輸出表中的元素 void DispList3(SqList L,int count){int i;printf("第%d趟排序結(jié)果:",count);for(i=1;i<=L.length;i++)printf("%4d",L.data[i].key);printf("\n"); } //冒泡排序 void BubbleSort(SqList *L,int n){int i,j,flag=1;DataType t;static int count=1;for(i=1;i<=n-1&&flag;i++){ //須要進(jìn)行n-1趟排序flag=0; //標(biāo)志位。若以有序,不須要進(jìn)行以下的排序for(j=1;j<=n-i;j++) //每一趟排序須要比較n-i次if(L->data[j].key>L->data[j+1].key){ t=L->data[j]; L->data[j]=L->data[j+1];L->data[j+1]=t;flag=1;}DispList3(*L,count);count++;} } //--------------------------------------------- /*對(duì)順序表L.r[low..high]的元素進(jìn)行一趟排序,使樞軸前面的元素keyword小于 樞軸元素的keyword,樞軸后面的元素keyword大于等于樞軸元素的keyword。并返回樞軸位置*/ int Partition(SqList *L,int low,int high){DataType t;KeyType pivotkey;pivotkey=(*L).data[low].key; //將表的第一個(gè)元素作為樞軸元素t=(*L).data[low];while(low<high){ //從表的兩端交替地向中間掃描while(low<high&&(*L).data[high].key>=pivotkey) //從表的末端向前掃描high--;if(low<high){ //將當(dāng)前high指向的元素保存在low位置(*L).data[low]=(*L).data[high];low++;}while(low<high&&(*L).data[low].key<=pivotkey) //從表的始端向后掃描low++;if(low<high){ //將當(dāng)前l(fā)ow指向的元素保存在high位置(*L).data[high]=(*L).data[low];high--;}}(*L).data[low]=t; //將樞軸元素保存在low=high的位置return low; //返回樞軸所在位置 } // void DispList2(SqList L,int pivot,int count){int i;printf("第%d趟排序結(jié)果:[",count);for(i=1;i<pivot;i++)printf("%-4d",L.data[i].key);printf("]");printf("%3d ",L.data[pivot].key);printf("[");for(i=pivot+1;i<=L.length;i++)printf("%-4d",L.data[i].key);printf("]");printf("\n"); } //對(duì)順序表L進(jìn)行高速排序 void QSort(SqList *L,int low,int high){int pivot;static int count=1;if(low<high){ //假設(shè)元素序列的長(zhǎng)度大于1pivot=Partition(L,low,high); //將待排序序列L.r[low..high]劃分為兩部分DispList2(*L,pivot,count); //輸出每次劃分的結(jié)果count++;QSort(L,low,pivot-1); //對(duì)左邊的子表進(jìn)行遞歸排序,pivot是樞軸位置QSort(L,pivot+1,high); //對(duì)右邊的子表進(jìn)行遞歸排序} } //對(duì)順序表L作高速排序 void QuickSort(SqList *L){QSort(L,1,(*L).length); } //--------------------------------------------- //將有序的s[low...mid]和s[mid+1..high]歸并為有序的t[low..high] void Merge(DataType s[],DataType t[],int low,int mid,int high){int i,j,k;i=low;j=mid+1;k=low;while(i<=mid&&j<=high){ //將s中元素由小到大地合并到tif(s[i].key<=s[j].key)t[k]=s[i++];elset[k]=s[j++];k++;}while(i<=mid) //將剩余的s[i..mid]拷貝到tt[k++]=s[i++];while(j<=high) //將剩余的s[j..high]拷貝到tt[k++]=s[j++]; } //2路歸并排序,將s[low...high]歸并排序并存儲(chǔ)到t[low...high]中 void MergeSort(DataType s[],DataType t[],int low,int high){int mid;DataType t2[MaxSize];if(low==high)t[low]=s[low];else{mid=(low+high)/2; //將s[low...high]平分為s[low...mid]和s[mid+1...high]MergeSort(s,t2,low,mid); //將s[low...mid]歸并為有序的t2[low...mid]MergeSort(s,t2,mid+1,high); //將s[mid+1...high]歸并為有序的t2[mid+1...high]Merge(t2,t,low,mid,high); //將t2[low...mid]和t2[mid+1..high]歸并到t[low...high]} } void InitSeqList1(SqList *L,DataType a[],int start,int n) {int i,k;for(k=1,i=start;i<start+n;i++,k++){L->data[k]=a[i];}L->length=n;} //--------------------------------------------- //順序表的初始化 void InitSeqList(SqList *L,DataType a[],int n){int i;for(i=1;i<=n;i++){L->data[i]=a[i-1];}L->length=n; } //輸出表中的元素 void DispList(SqList L){int i;for(i=1;i<=L.length;i++)printf("%4d",L.data[i].key);printf("\n"); } void main(){DataType a[]={56,22,67,32,59,12,89,26,48,37};int delta[]={5,3,1};int gap=5;int i,n=10,m=3;SqList L;printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");/*直接插入排序*/InitSeqList(&L,a,n);printf("排序前:");DispList(L);InsertSort(&L);printf("直接插入排序結(jié)果:");DispList(L);printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");/*折半插入排序*/InitSeqList(&L,a,n);printf("排序前:");DispList(L);BinInsertSort(&L);printf("折半插入排序結(jié)果:");DispList(L);printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");/*希爾排序*/InitSeqList(&L,a,n);printf("排序前:");DispList(L);ShellInsertSort(&L,delta,m);printf("希爾排序結(jié)果:");DispList(L);printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");/*希爾排序*/InitSeqList(&L,a,n);printf("排序前:");DispList(L);ShellInsertSort2(&L,gap);printf("希爾排序2結(jié)果:");DispList(L);printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");/*簡(jiǎn)單選擇排序*/InitSeqList(&L,a,n);printf("排序前:");DispList(L);SelectSort(&L,n);printf("簡(jiǎn)單選擇排序結(jié)果:");DispList(L);printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");/*堆排序*/InitSeqList(&L,a,n);printf("排序前:");DispList(L);HeapSort(&L);printf("堆排序結(jié)果:");DispList(L);printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");DataType b[]={37,22,43,32,19,12,89,26,48,92};/*冒泡排序*/InitSeqList(&L,b,n);printf("冒泡排序前:");DispList(L);BubbleSort(&L,n);printf("冒泡排序結(jié)果:");DispList(L);printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");/*高速排序*/InitSeqList(&L,b,n);printf("高速排序前:");DispList(L);QuickSort(&L);printf("高速排序結(jié)果:");DispList(L);printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");/*歸并排序*/DataType c[MaxSize];InitSeqList(&L,b,n); /*將數(shù)組a[0...n-1]初始化為順序表L*/printf("歸并排序前:");DispList(L);MergeSort(L.data,c,1,n);InitSeqList1(&L,c,1,n); /*將數(shù)組c[1...n]初始化為順序表L*/printf("歸并排序結(jié)果:");DispList(L);printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");system("pause"); }

總結(jié)

以上是生活随笔為你收集整理的_DataStructure_C_Impl:SeqListBasedSort的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久午夜国产精品 | 日日弄天天弄美女bbbb | 亚洲精品aⅴ | 日本a级片免费 | www.插插插 | 日韩欧美毛片 | 婷婷丁香激情 | 欧美日韩精品综合 | 少妇大叫太粗太大爽一区二区 | 欧美午夜精品一区二区三区 | 久久精品8 | 天堂在线官网 | 天降女子在线观看 | 色女人影院 | 欧美性猛交乱大交3 | 豆花视频成人 | 欧美激情va永久在线播放 | 成人黄色小说在线观看 | 亚洲激情在线播放 | 亚洲黄网在线观看 | 日本囗交做爰视频 | 国产高清色 | va在线播放 | 国产激情一区二区三区视频免樱桃 | 国产成人三级在线观看视频 | 天天狠天天插 | 国产www视频| 麻豆一区二区三区在线观看 | 色香蕉影院 | 丁香婷婷一区二区三区 | 边添小泬边狠狠躁视频 | 午夜免费视频观看 | 黄色avv| 国产乱码精品一区二三区蜜臂 | 色偷偷免费费视频在线 | 日韩精品视频免费看 | 男女无遮挡猛进猛出 | 免费看av网 | 不卡av在线免费观看 | 欧美 唯美 清纯 偷拍 | 国产免费aa | 91精品国产电影 | 精品国自产拍在线观看 | 大陆一级黄色片 | 俄罗斯破处 | 中文字幕精品久久久久人妻红杏ⅰ | 国产福利一区在线 | 亚洲成年人 | 久久h| 噜噜噜久久| 国产精品久久久久久久久绿色 | 黄色av网址在线 | 成人在线免费播放视频 | 女人张开双腿让男人捅 | 免费在线观看黄色网址 | 国产精品久久国产 | 极品久久久久 | aa级黄色片 | 日本草草影院 | 91在线导航 | 欧美三级午夜理伦 | 天天想你在线观看完整版电影高清 | 2018av| 91精品人妻互换一区二区 | 国产乱淫av麻豆国产 | 欧美做爰全过程免费观看 | www.天天干| 欧美黄色免费大片 | 欧美日韩一区二区三区四区 | 亚洲A∨无码国产精品 | 久久免费毛片 | 中文一区视频 | 久久成人一区二区 | 99在线视频免费观看 | 久草福利资源站 | 国产精品亚洲二区在线观看 | 女生张开腿给男生桶 | 美女隐私免费观看 | 国产不卡毛片 | 在线免费观看欧美大片 | 午夜日韩在线 | 免费无码国产v片在线观看 三级全黄做爰在线观看 | 干b视频在线观看 | 亚洲国产一区二区三区在线观看 | 加勒比av在线播放 | 国内外免费激情视频 | 欧美性大战久久久久xxx | 专业操老外 | 国产高清不卡一区 | 成人av国产 | 免费在线看黄色片 | www.色啪啪.com| 26uuu国产| 91福利在线观看视频 | 亚洲综合少妇 | 久久逼逼 | 国产又粗又猛又爽又黄的视频小说 | 男男野外做爰全过程69 | 欧美日韩电影一区 |