02 算法基础

#分治

插入排序

 void insertSort(keytype k[ ],int n){
int i, j;
keytype temp;
for(i=1;i<n;i++){
temp=k[i];
for(j=i-1; j>=0 && temp<k[j]; j--)
k[j+1]=k[j];
k[j+1]=temp;
}
}

最好情况 T(n) = an+b Pasted image 20241017204211.pngPasted image 20241017204318.png

最差情况T(n) = an^2+bn+c Pasted image 20241017204339.png

归并排序

 #include <stdio.h>  
 #include <ctype.h>  
 #include <string.h>  
 #include <math.h>  
 #include <stdlib.h>  
 #define MAX 1000int temp[MAX], ans[MAX] = {50, 10, 20, 30, 70, 40, 80, 60};void Mergesort(int startId, int endId);  
 void Merge(int startId, int midId, int endId);int main() {  
     Mergesort(0, 7);  
     for(int i=0; i<8; i++)  
         printf("%d ", ans[i]);return 0;  
 }  
 void Mergesort(int startId, int endId){  
     int midId = startId + (endId - startId)/2;  
     if(startId < endId){  
         Mergesort(startId, midId);  
         Mergesort(midId+1, endId);  
         Merge(startId, midId, endId);  
     }  
 }void Merge(int startId, int midId, int endId){  
     int i=startId, j=midId+1, k=startId;  
     while(i <= midId && j<=endId){  
         if(ans[i] < ans[j]){  
             temp[k] = ans[i];  
             k++; i++;  
         }else{  
             temp[k] = ans[j];  
             k++; j++;  
         }  
     }  
     while(i <= midId){  
         temp[k] = ans[i];  
         k++; i++;  
     }  
     while(j <= endId){  
         temp[k] = ans[j];  
         k++; j++;  
     }  
     for(i=startId; i<=endId; i++){  
         ans[i] = temp[i];  
     }  
 }
Built with MDFriday ❤️