排序算法整理(第十五周实践项目)
生活随笔
收集整理的這篇文章主要介紹了
排序算法整理(第十五周实践项目)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
直接插入排序
#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");} }
總結
以上是生活随笔為你收集整理的排序算法整理(第十五周实践项目)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: poj 3181
- 下一篇: G2. 唐纳德与子串 (Hard)kmp