效率最高的冒泡与快排算法 C语言实现

    科技2024-05-15  81

    效率最高的冒泡与快排算法 C语言实现

    冒泡排序思想代码 快速排序思想代码

    冒泡排序

    思想

    不断地把最大或最小元素不断冒出来。 如排序5 3 4 9 7 6 2 假如我们用升序的方式,从左边开始扫描,相邻元素两两比较,当左边元素比右边大时就交换,反之,则不用交换。 第一趟循环后的结果为:3 1 5 4 6 7 4 9 这样就把最大的9冒出来了 第二塘循环后的结果为:1 3 4 5 6 4 7 9 这样就把最大的7冒出来了 以此循环,结果如下代码图所示

    代码

    #include<stdio.h> void bubbling(int *arr, int N) { int flag = 0; //flag判断是否有序,,如果有序,马上退出 for(int i=0; i<N-1; i++) { flag = 0; for(int j=0; j<N-i-1; j++) if(arr[j] > arr[j+1]) { flag = 1; arr[j] ^= arr[j+1]; arr[j+1] ^= arr[j]; arr[j] ^= arr[j+1]; } /* for(int t=0; t<N; t++) printf("%d ", arr[t]); printf("\n"); */ if(flag == 0) return; } } int main(int agrc, char **agrv) { int N; scanf("%d", &N); int arr[N]; for(int i=0; i<N; i++) scanf("%d", &arr[i]); bubbling(arr, N); for(int i=0; i<N; i++) printf("%d ", arr[i]); printf("\n"); return 0; }

    结果如下:

    快速排序

    思想

    快速排序的基本思想是任取待排序序列的一个元素作为中心元素(可以用第一个,最后一个,也可以是中间任何一个),习惯将其称为pivot,枢轴元素;将所有比枢轴元素小的放在其左边;将所有比它大的放在其右边;形成左右两个子表;然后对左右两个子表再按照前面的算法进行排序,直到每个子表的元素只剩下一个。

    代码

    #include <stdio.h> int array_num; void QuickSort(int left, int right, int *quick_sort) { int temp, i=left, j=right; if(left >= right) return ; temp = quick_sort[i]; while(i < j) { while(quick_sort[j]>=temp && i<right) j--; quick_sort[i] = quick_sort[j]; while(quick_sort[i]<=temp && i<j) i++; quick_sort[j] = quick_sort[i]; } quick_sort[i] = temp; for(int p = 0; p<array_num; p++) printf("%d ", quick_sort[p]); printf("\n"); QuickSort(left, i-1, quick_sort); QuickSort(i+1, right, quick_sort); } int main(int agrc, char **agrv) { printf("input number:\n"); scanf("%d", &array_num); int quick_sort[array_num]; for(int j = 0; j < array_num; j++) scanf("%d", &quick_sort[j]); QuickSort(0, array_num - 1, quick_sort); /* for(int j = 0; j < array_num; j++) printf("%d ", quick_sort[j]); printf("\n"); */ return 0; }

    结果如下:

    Processed: 0.013, SQL: 8