算法---4.快速排序
来源:互联网 发布:法线贴图转换软件 编辑:程序博客网 时间:2024/06/04 17:50
1. 快速排序
中间partition的过程就是一个swap的过程,
保存key
右/左->左/右 -->整个过程是一个swap,但这儿是个单向的赋值
key->左/右
第1趟按arr[0],分成左右两部分
左部分与右部分再按上述过程递归
1.2 代码
1.3 运行结果
1.4 性能
O(nlogn)
1.5 代码打包
quick.rar (下载后改名为quick.tar.gz
中间partition的过程就是一个swap的过程,
保存key
右/左->左/右 -->整个过程是一个swap,但这儿是个单向的赋值
key->左/右
第1趟按arr[0],分成左右两部分
左部分与右部分再按上述过程递归
1.2 代码
- #include <stdio.h>
- #include <stdlib.h>
- #define dbmsg(fmt, args ...) printf("%s:%s[%d]: "fmt"\n", __FILE__,__FUNCTION__, __LINE__,##args)
- #define SWAP(x,y) (x=(x)+(y),y=(x)-(y),x=(x)-(y))
- int dump_arry(int* arr, int len)
- {
- int i;
- for(i=0; i<len; i++)
- {
- //printf("%d=%d ", i, arr[i]);
- printf("%d ", arr[i]);
- }
- printf("\n");
- return 0;
- }
- int partition(int* arr, int low, int high)
- {
- int i, j;
- int pivotkey;
- if(low >= high)
- return 0;
- pivotkey = arr[low]; //以第一个数据为基准分为左小右大的两部分
- while(low < high)
- {
- while( (low<high) && (arr[high]>=pivotkey) )
- high--;
- arr[low] = arr[high];
- dump_arry(arr, 10);
- while( (low<high) && (arr[low]<=pivotkey) )
- low++;
- arr[high] = arr[low];
- dump_arry(arr, 10);
- }
- arr[low] = pivotkey;
- dump_arry(arr, 10);
- return low;
- }
- int quick_sort(int* arr, int low, int high)
- {
- int pivotloc = partition(arr, low, high);
- dbmsg("pivotloc=%d", pivotloc);
- if(low < high) //以第一个数据为基准分为左小右大的两部分,这样一直分一直分,直到low<high< span="" style="word-wrap: break-word;">
- {
- dbmsg("left");
- quick_sort(arr, low, pivotloc-1);
- dbmsg("right");
- quick_sort(arr, pivotloc+1, high);
- }
- return 0;
- }
- int main ( int argc, char *argv[] )
- {
- //int arr[] = {49, 38, 65, 97, 76, 13, 27, 49};
- int arr[] = {49, 38, 65, 97, 76, 13, 27, 49, 55, 4};
- int len = sizeof(arr)/sizeof(int);
- dbmsg("len=%d", len);
- dbmsg("before quick:");
- dump_arry(arr, len);
- quick_sort(arr, 0, len-1);
- dbmsg("after quick:");
- dump_arry(arr, len);
- return EXIT_SUCCESS;
- }
- quick.c:main[52]: before quick:
- 49 38 65 97 76 13 27 49 55 4
- 4 38 65 97 76 13 27 49 55 4
- 4 38 65 97 76 13 27 49 55 65
- 4 38 27 97 76 13 27 49 55 65
- 4 38 27 97 76 13 97 49 55 65
- 4 38 27 13 76 13 97 49 55 65
- 4 38 27 13 76 76 97 49 55 65
- 4 38 27 13 76 76 97 49 55 65
- 4 38 27 13 76 76 97 49 55 65
- 4 38 27 13 49 76 97 49 55 65 -->按49分成左右两部分
- 4 38 27 13 49 76 97 49 55 65 -->49的left再4分成左右两部分
- 4 13 27 13 49 76 97 49 55 65
- 4 13 27 13 49 76 97 49 55 65
- 4 13 27 38 49 76 97 49 55 65
- 4 13 27 38 49 76 97 49 55 65
- 4 13 27 38 49 65 97 49 55 65
- 4 13 27 38 49 65 97 49 55 97
- 4 13 27 38 49 65 55 49 55 97
- 4 13 27 38 49 65 55 49 55 97
- 4 13 27 38 49 49 55 49 76 97
- 4 13 27 38 49 49 55 49 76 97
- 4 13 27 38 49 49 55 65 76 97
- 4 13 27 38 49 49 55 65 76 97
- quick.c:main[55]: after quick:
- 4 13 27 38 49 49 55 65 76 97
O(nlogn)
1.5 代码打包
quick.rar (下载后改名为quick.tar.gz
0 0
- 算法---4.快速排序
- 排序算法--快速排序
- 排序算法--快速排序
- 排序算法---快速排序
- 排序算法-快速排序
- 排序算法------快速排序
- 排序算法---快速排序
- 排序算法-快速排序
- 排序算法---快速排序
- 排序算法--快速排序
- 排序算法--快速排序
- 排序算法--快速排序
- 排序算法:快速排序
- 排序算法 快速排序
- 排序算法--快速排序
- 排序算法--快速排序
- 【排序算法】快速排序
- 排序算法--快速排序
- 让hql支持按位与运算
- 深入mysql "ON DUPLICATE KEY UPDATE" 语法的分析
- 解调
- 算法---3.冒泡排序
- 社交网络可以延年益寿?真的假的
- 算法---4.快速排序
- java.lang.RuntimeException: Handler (com.***.behavior.BEvent$1) {421bca80} sending message to a Hand
- 粒子群算法(4)----粒子群算法分类
- 算法---5.选择排序
- STM32F0库应用技术笔记——iar工程建立&时钟管理
- You can try adding it manually in `~/.cocoapods/repos` or via `pod repo add`.
- 算法---6.堆排序之树形打印
- jsp页面发送ajax请求遮罩层显示失败,或者请求完才显示
- 算法---6.堆排序