2、 折半插入排序
#include <stdio.h> void BInsertSort(int arr[],int n){ int i,j; for(i=1;i<n;i++){ int x=arr[i];//将需要进行插入排序的元素赋值给x int low=0,high=i-1; while(low<=high){ int mid=(low+high)/2; if(x<arr[mid]) high=mid-1; else low=mid+1; } for(j=i-1;j>=low;j--)//记录依次后移 arr[j+1]=arr[j]; arr[low]=x; } } int main(void){ int i; int arr[10]={12,45,62,16,8,2,23,19,99,32}; printf("原始数据为:\n"); for(i=0;i<10;i++){ printf("%5d",arr[i]); } printf("\n"); BInsertSort(arr,10); printf("\n折半插入排序后的顺序为:\n"); for(i=0;i<10;i++){ printf("%5d",arr[i]); } printf("\n"); return 0; }3、 希尔排序
#include <stdio.h> void shellsort(int arr[],int n){ for(int delta=n/2;delta>0;delta=delta/2){ for(int i=delta;i<n;i++){ int temp=arr[i]; for(int j=i-delta;j>=0&&temp<arr[j];j=j-delta){ arr[j+delta]=arr[j]; } arr[j+delta]=temp; } } } int main(void){ int i; int arr[10]={12,45,62,16,8,2,23,19,99,32}; printf("原始数据为:\n"); for(i=0;i<10;i++){ printf("%5d",arr[i]); } printf("\n"); shellsort(arr,10); printf("\n希尔排序后的顺序为:\n"); for(i=0;i<10;i++){ printf("%5d",arr[i]); } printf("\n"); return 0; }4、冒泡排序
#include<stdio.h> void bubblesort(int arr[],int n){ int i,j; for(i=0;i<n-1;i++){ for(j=0;j<n-i-1;j++){ if(arr[j+1]<arr[j]){ int temp=arr[j+1]; arr[j+1]=arr[j]; arr[j]=temp; } } } } int main(void){ int i; int arr[10]={12,45,62,16,8,2,23,19,99,32}; printf("原始数据为:\n"); for(i=0;i<10;i++){ printf("%5d",arr[i]); } printf("\n"); bubblesort(arr,10); printf("\n冒泡排序后的顺序为:\n"); for(i=0;i<10;i++){ printf("%5d",arr[i]); } printf("\n"); return 0; }