c语言查找排序.ppt
文本预览下载声明
线性查找 就是用搜索关键字逐个与数组元素相比较以实现查找。 适用于规模较小的数组或无序排列的数组。 折半查找 定义: 就是用搜索关键字与数组及其 子数组的中间元素的值进行比较以实现查找。 适用: 适用于有序排列的数组。 优点: 每次比较之后有一半的数组元素可以被排除在比较范围之外。 #include stdio.h int main() { int a[9] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int high = 9, low = 0, m, key; printf(请输入要查找的数:); scanf_s(%d, key); 1.冒泡排序 2.选择排序 3.插入法 原理为从a[0]开始,依次将其和后面的元素比较,若a[0]a[i],则交换它们,一直比较到a[n]。同理对a[1],a[2],...a[n-1]处理,即完成排序 选择排序 选择法循环过程与冒泡法一致, 比冒泡法省下许多无用的交换,提高了效率。 #include stdio.h int a[10] = {0, 1, 4, 3, 5, 9, 2, 6, 8, 7 }; int i, j, t, max, max_j; for (i = 0; i 9; i++) { max = a[i]; max_j = i; //假设第一位为最大值,最大值所在位置为第i+1位 for (j = i+1; j 10; ++j) if (max a[j]) { max = a[j]; //找出最大值 max_j = j; //找出最大值对应的位置 } t = a[max_j]; //将最大值同循环开始的第一位(即i)交换位置 a[max_j] = a[i]; a[i] = t; } for (i = 0; i 10; ++i) //输出编排后的数组 printf(%d\t, a[i]); } int main() { int arr[9] = { 1, 2, 3, 4, 6, 7, 8, 9 }; int i, key, p; printf(请输入); //输入要插入的数 scanf(%d, key); for (i = 0; i 8; ++i) //判断出要插入的数所在位置 if (key arr[i]) { p = i; break; } for (i = 7; i = p; i--) //将要插入的数字插入 arr[i + 1] = arr[i]; arr[p] = key; for (i = 0; i 9; ++i) //输出数组 printf(%d, arr[i]); } * * * 至少让自己不讨厌 不能让每个人都喜欢, #include stdio.h int main() { int arr[] = { 1, 2, 3, 4, 5, 6 }; int i, key; while (1) { printf(\n请输入要查找的数:); scanf(%d, key); for (i = 0; i 6; ++i) if (key == arr[i]) { printf(该数字在第%d位, i + 1); break; } getchar(); } while (1) { m = (high + low) / 2; if (key == a[m]) { printf(该数字在第%d位, m+1); break; } else if (key a[m]) high = m; else low = m; } getchar(); } 原理简单,但是交换次数多,效率低。 #include stdio.h int main() { int a[9] = { 33, 55, 11, 22, 99, 66, 77, 44, 88 }; int i, j, t; for (i = 0; i 9;++i) for (j = 0; j 9-1- i;++j) if (a[j]a[j + 1]) { t = a[j]; a[j] = a[j + 1]; a[j + 1] = t; } for (
显示全部