shell排序

xiaoxiao2021-02-28  61

#include<stdio.h> #include<stdlib.h> //输出 void print(int *a,int length) { for (int i = 1; i < length; i++) printf("%d ",a[i]); printf("\n"); } //shell排序的过程 //数组第一个数据,不使用。 void pro(int *a, int length,int len) { for (int i = 1+len; i <= length; i++)//直接插入排序 { if (a[i] < a[i - len]) { a[0] = a[i]; int j = 0; for (j=i-len;a[j]>a[0]&&j>0;j-=len) { a[j + len] = a[j]; } a[j+len] = a[0]; } } } //shell排序 void shell(int *a,int length,int *dalte,int len)//以不同的间隔,加快排序的过程 { for (int i = 0; i < len; i++) pro(a,length,dalte[i]); } int main(void) { int a[] = {9999,4,5,8,9,2,3,0,6,7,45,98,415,31,8489,66,58}; int dalte[] = {4,2,1};//或者{5,3,1} print(a,sizeof(a)/sizeof(int)); shell(a, sizeof(a) / sizeof(int)-1,dalte,sizeof(dalte)/sizeof(int)); //传入的长度是将要排序的数组的长度 print(a, sizeof(a) / sizeof(int)); return 0; }
转载请注明原文地址: https://www.6miu.com/read-71587.html

最新回复(0)