记得关注我,获取更多答案~这是最后一次转发在群和朋友圈了,以后自己进入我的专栏看了
代码:
/*-------------------------------------------------------------------- 代码功能: * * 1.简单插入排序算法 * 2.希尔排序算法 * 3.冒泡排序算法 * 4.冒泡排序的改进算法 * 5.快速排序 * --------------------------------------------------------------------- 作者:令狐荣豪 时间:2019/6/5 ----------------------------------------------------------------------*/ #include<stdio.h> /*--------------------------------------------------------------------*/ /*==================================================================== 函数功能:简单插入排序 函数接口:数组和长度 ======================================================================*/ void Insertion_Sort(int a[],int n) { int i, j, get; for (i = 1; i < n; i++) { get = a[i]; for (j = i - 1; j >= 0 && a[j] > get; j--) { a[j + 1] = a[j]; } a[j + 1] = get; } } /*=============================================================== 函数功能:希尔排序 函数接口:数组和长度 =================================================================*/ void ShellSort(int a[],int n) { int d, i, j,get; for (d = n / 2; d >= 1; d = d / 2) { for (i = d; i <n; i++) { get = a[i]; for (j = i - d; j >= 0 && a[j] > get; j -= d) a[j + d] = a[j]; } a[j + d] = get; } } /*=============================================================== 函数功能:冒泡排序 函数接口:数组和长度 =================================================================*/ void Bubble(int a[], int len) { int i, j, temp; for (i = 0; i < len - 1; i++) { for (j = len - 1; j > i; j--) if (a[j] < a[j - 1]) { temp = a[j - 1]; a[j - 1] = a[j]; a[j] = temp; } } } /*=============================================================== 函数功能:改进版冒泡 函数接口:数组和长度 =================================================================*/ void Bubble_Sort(int a[], int sz) { int i, j; int flag = 1; //添加标志位 for (i = 0; i < sz - 1; i++) //控制比较的趟数 { flag = 1; for (j = 0; j < sz - 1 - i; j++) //控制每趟比较的次数 { if (a[j] > a[j + 1]) //升序排列 { int tmp = a[j]; a[j] = a[j + 1]; a[j + 1] = tmp; flag = 0; } } if (flag == 1) break; } } /*=============================================================== 函数功能:Swap函数 函数接口:交换数值 =================================================================*/ void Swap(int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; return; } /*=============================================================== 函数功能:快速排序 函数接口:数组,长度,起始点,终点 ================================================================*/ void Quick_Sort(int array[], int maxlen, int begin, int end) { int i, j; if (begin < end) { i = begin + 1; // 将array[begin]作为基准数,因此从array[begin+1]开始与基准数比较! j = end; // array[end]是数组的最后一位 while (i < j) { if (array[i] > array[begin]) // 如果比较的数组元素大于基准数,则交换位置。 { Swap(&array[i], &array[j]); // 交换两个数 j--; } else { i++; // 将数组向后移一位,继续与基准数比较。 } } if (array[i] >= array[begin]) // 这里必须要取等“>=”,否则数组元素由相同的值时,会出现错误! { i--; } Swap(&array[begin], &array[i]); // 交换array[i]与array[begin] Quick_Sort(array, maxlen, begin, i); Quick_Sort(array, maxlen, j, end); } } /*====================================================================*/ /*====================================================================*/ /*====================================================================*/ int main() { int i, n, a[100]; printf("请输入元素个数:\n"); scanf("%d", &n); printf("\n请输入待排序的元素,空格分隔:\n"); for (i = 0; i < n; i++) scanf("%d", &a[i]); printf("排序后:\n"); /*--------------------------------------------------------------------*/ Insertion_Sort(a, n); for (i = 0; i < n; i++) printf("%d", a[i]); printf("\n"); /*--------------------------------------------------------------------*/ ShellSort(a, n); for (i = 0; i < n; i++) printf("%d", a[i]); printf("\n"); /*--------------------------------------------------------------------*/ Bubble(a, n); for (i = 0; i < n; i++) printf("%d", a[i]); printf("\n"); /*--------------------------------------------------------------------*/ Bubble_Sort(a, n); for (i = 0; i < n; i++) printf("%d", a[i]); printf("\n"); /*--------------------------------------------------------------------*/ Quick_Sort(a, n, 0, n-1); for (i = 0; i < n; i++) printf("%d", a[i]); printf("\n"); /*--------------------------------------------------------------------*/ return 0; }
实验效果: