头文件Insert.h
#include
void Swap(int *a, int *b); void StraightInsert(int *a, int n); void HalfSearch(int *L, int n); void BubbleSort(int *L, int n); void SelectSort(int L[], int n);
测试文件Main.c
#include
#include"Insert.h" int main() { int L[8] = { 49,38,65,97,76,13,27,49 };//0为辅助空间初始化 int n = 8; //StraightInsert(L, 8);//直接插入排序 //HalfSearch(L, n);//折半查找 BubbleSort(L, n);//冒泡排序 //输出结果 for (int i = 0; i < n; ++i) { printf("%d-->", L[i]); } printf("\n"); }
函数实现Insert.c
#include"Insert.h" #include
void Swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } void StraightInsert(int *L, int n) { for (int i = 1; i < n; i++) { if (L[i] < L[i - 1])//比较的是它以及它的邻居 { Swap(&L[i], &L[i - 1]);//注意:这里传引用(因为是数组中的某一个值进行交换) for (int j = i - 1; j > 0 && L[j] < L[j - 1]; j--) //比较的是它和它之前的 Swap(&L[j], &L[j - 1]); }//if }//for } void HalfSearch(int L[], int n) { int i, j, low, high, mid, key; for (i = 1; i < n; i++) { key = L[i];//把L[i]的值保存在key变量中 low = 0; high = i - 1; while (low <= high)//折半查找 { mid = (low + high) / 2; if (L[mid] >= key) high = mid - 1;//如果大于key值,则查找范围缩小到左子序列 else low = mid + 1;//如果小于key值,则查找范围缩小到右子序列 } for (j = i - 1; j >= high + 1; j--) L[j + 1] = L[j];//将high之后的数据整体后移 L[high + 1] = key;//将key值插入该位置 } } void BubbleSort(int L[], int n) { int i, j; for (i = 0; i L[j + 1]) Swap(&L[j], &L[j + 1]); } } } void SelectSort(int L[], int n) { int i, j, k, temp; for (i = 0; i < n; i++) { k = i;//记录位置 for (j = i + 1; j < n; j++)//查找后面的最小值 if (L[k] > L[j]) k = j;//记录位置 if (k != i)//交换位置 Swap(&L[i],&L[k]); } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)