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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

排序算法整理(第十五周实践项目)

發布時間:2025/4/16 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 排序算法整理(第十五周实践项目) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

直接插入排序

#include <stdio.h> #define MaxSize 20 typedef int KeyType; //定義關鍵字類型 typedef char InfoType[10]; typedef struct //記錄類型 {KeyType key; //關鍵字項InfoType data; //其他數據項,類型為InfoType } RecType; //排序的記錄類型定義void InsertSort(RecType R[],int n) //對R[0..n-1]按遞增有序進行直接插入排序 {int i,j;RecType tmp;for (i=1; i<n; i++){tmp=R[i];j=i-1; //從右向左在有序區R[0..i-1]中找R[i]的插入位置while (j>=0 && tmp.key<R[j].key){R[j+1]=R[j]; //將關鍵字大于R[i].key的記錄后移j--;}R[j+1]=tmp; //在j+1處插入R[i]} } 折半插入排序(二分排序)

#include <stdio.h> #define MaxSize 20 typedef int KeyType; //定義關鍵字類型 typedef char InfoType[10]; typedef struct //記錄類型 {KeyType key; //關鍵字項InfoType data; //其他數據項,類型為InfoType } RecType; //排序的記錄類型定義void InsertSort1(RecType R[],int n) //對R[0..n-1]按遞增有序進行直接插入排序 {int i,j,low,high,mid;RecType tmp;for (i=1; i<n; i++){tmp=R[i];low=0;high=i-1;while (low<=high){mid=(low+high)/2;if (tmp.key<R[mid].key)high=mid-1;elselow=mid+1;}for (j=i-1; j>=high+1; j--)R[j+1]=R[j];R[high+1]=tmp;} } int main() {int i,n=10;RecType R[MaxSize];KeyType a[]= {9,8,7,6,5,4,3,2,1,0};for (i=0; i<n; i++)R[i].key=a[i];printf("排序前:");for (i=0; i<n; i++)printf("%d ",R[i].key);printf("\n");InsertSort1(R,n);printf("排序后:");for (i=0; i<n; i++)printf("%d ",R[i].key);printf("\n");return 0; }
for(int i=0;i<10;++i){int tmp=a[i];int low=0;int hight=i-1;while(low<=hight){mid=(low+hight)/2;if(a[mid]<tmp)low=mid+1;elsehight=mid-1;}//for(int k=i-1;k>=low;--k)a[k+1]=a[k];a[low]=tmp;for(int i=0;i<10;++i)printf("%d ",a[i]);printf(" :%d %d %d\n",low,hight,mid);//每層while循環結束時low=height+1; //最后的賦值語句也可以這樣: //for(int k=i-1;k>=height+1;--k) // a[k+1]=a[k]; //a[height+1]=tmp; } 冒泡排序:void BubbleSort(RecType R[],int n) {int i,j,k;RecType tmp;for (i=0; i<n-1; i++){for (j=n-1; j>i; j--) //比較,找出本趟最小關鍵字的記錄if (R[j].key<R[j-1].key){tmp=R[j]; //R[j]與R[j-1]進行交換,將最小關鍵字記錄前移R[j]=R[j-1];R[j-1]=tmp;}printf("i=%d: ",i);for (k=0; k<n; k++)printf("%d ",R[k].key);printf("\n");} } //哈哈,賀老改進的冒泡排序: void BubbleSort1(RecType R[],int n) {int i,j,k,exchange;RecType tmp;for (i=0; i<n-1; i++){exchange=0;for (j=n-1; j>i; j--) //比較,找出最小關鍵字的記錄if (R[j].key<R[j-1].key){tmp=R[j]; //R[j]與R[j-1]進行交換,將最小關鍵字記錄前移R[j]=R[j-1];R[j-1]=tmp;exchange=1;}printf("i=%d: ",i);for (k=0; k<n; k++)printf("%d ",R[k].key);printf("\n");if (exchange==0) //中途結束算法return;} } 選擇排序: void SelectSort(RecType R[],int n) {int i,j,k,l;RecType temp;for (i=0; i<n-1; i++) //做第i趟排序{k=i;for (j=i+1; j<n; j++) //在當前無序區R[i..n-1]中選key最小的R[k]if (R[j].key<R[k].key)k=j; //k記下目前找到的最小關鍵字所在的位置if (k!=i) //交換R[i]和R[k]{temp=R[i];R[i]=R[k];R[k]=temp;}printf("i=%d: ",i);for (l=0; l<n; l++)printf("%d ",R[l].key);printf("\n");} }

總結

以上是生活随笔為你收集整理的排序算法整理(第十五周实践项目)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。