简单的快速排序和冒泡排序

来源:互联网 发布:jbqbld128enm编程 编辑:程序博客网 时间:2024/05/29 18:34

快速排序

#include<stdio.h>void QuickSort(int arr[],int start,int end){int i = start;int j = end;//取基准数int target = arr[start];if (i < j){while (i<j){//从右向左找比基准数小的,一个一个比较,大于基准数就自减,直到找到小的while (i<j && arr[j]>target){--j;}//找到后就交换数据if (i < j){arr[i] = arr[j];i++;//从左边的第一个数开始找比基准数大的}//从左向右找比基准数大的,一个一个比较,小于基准数就自减,直到找到大的while (i<j && arr[i]<target){++i;}if (i < j){arr[j] = arr[i];--j;}}//i的位置就是基准数最合适的位置,把数据一分为二了继续排序,左边全是比基准数小的,右边全是比基准数大的arr[i] = target;//排序前半部分QuickSort(arr, start, i-1);//排序后半部分QuickSort(arr, i+1, end);}}void PrintQuickSort(int arr[], int len){int i = 0;for (i = 0; i < len; ++i){printf("%d\n", arr[i]);}}int main(){int arr[] = { 10, 9, 6, 4, 5, 3, 2, 6 };int len = sizeof(arr) / sizeof(arr[0]);QuickSort(arr,0,len-1);PrintQuickSort(arr, len);getchar();return 0;}
打印结果




冒泡排序:两个for循环,最里面的循环找到最大或者最小,比较循环len-1次,里层的循环比较完一次后len-1-i

#include<stdio.h>void Sort(int len,int arr[]){int i, j, tmp;for (i = 0; i < len-1; ++i){for (j = 0; j < len-i-1; ++j){if (arr[j]>arr[j + 1]){tmp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tmp;}}}}int main(){int arr[] = { 10, 9, 6, 4, 5, 3, 2, 6 };int len = sizeof(arr)/sizeof(arr[0]);Sort(len, arr);int i = 0;for (i = 0; i < len; ++i){printf("%d\n",arr[i]);}getchar();return 0;}

打印结果:




原创粉丝点击