学习算法(5)——快速排序
来源:互联网 发布:江苏域名备案 编辑:程序博客网 时间:2024/06/05 07:03
1. 前言
快速排序,很经典,无数的地方都提到。代码,虽然看起来不多,但是理解起来,并不是很容易。我花了很长时间,才弄明白。下面的代码,最关键的地方,就是理解 i 和 j 的增长的意义。【关键核心理解】
j : 序号小到大,做数组轮询。
i : 始终停留在比pivot大的数字的前一个坐标上。这个坐标之前的数字都小于pivot 或者 i=-1 。
2. 代码
/* C implementation QuickSort */#include<stdio.h>// A utility function to swap two elementsvoid swap(int* a, int* b){ int t = *a; *a = *b; *b = t;}/* This function takes last element as pivot, places the pivot element at its correct position in sorted array, and places all smaller (smaller than pivot) to left of pivot and all greater elements to right of pivot */int partition (int arr[], int low, int high){ int pivot = arr[high]; // pivot int i = (low - 1); // Index of smaller element for (int j = low; j <= high- 1; j++) { // If current element is smaller than or // equal to pivot if (arr[j] <= pivot) { i++; // increment index of smaller element swap(&arr[i], &arr[j]); } } swap(&arr[i + 1], &arr[high]); return (i + 1);}/* The main function that implements QuickSort arr[] --> Array to be sorted, low --> Starting index, high --> Ending index */void quickSort(int arr[], int low, int high){ if (low < high) { /* pi is partitioning index, arr[p] is now at right place */ int pi = partition(arr, low, high); // Separately sort elements before // partition and after partition quickSort(arr, low, pi - 1); quickSort(arr, pi + 1, high); }}/* Function to print an array */void printArray(int arr[], int size){ int i; for (i=0; i < size; i++) printf("%d ", arr[i]); printf("\n"); }// Driver program to test above functionsint main(){ int arr[] = {10, 7, 8, 9, 1, 5}; int n = sizeof(arr)/sizeof(arr[0]); quickSort(arr, 0, n-1); printf("Sorted array: \n"); printArray(arr, n); return 0;}
----
0 0
- 学习算法(5)——快速排序
- 排序算法学习——快速排序
- 经典算法学习——快速排序
- 学习算法导论——快速排序
- 基础算法学习笔记—快速排序
- 《算法导论》学习笔记(2)——快速排序
- 算法学习(五)——快速排序
- 排序算法5——快速排序
- (5)排序算法——快速排序
- java排序算法(5)—快速排序
- 排序算法—快速排序
- 排序算法—快速排序
- 算法学习之排序(5)--快速排序
- 算法学习(排序三)快速排序
- 算法导论学习笔记——快速排序算法
- 学习回顾算法(快速排序算法)
- 算法学习,快速排序
- 算法学习--快速排序
- [PAT-乙级]1025.反转链表
- Linux内核之input输入子系统
- java Redis缓存加protostuff反序列实例
- 在线云评测系统日志二
- 基于 Binder 的跨进程通信以及 Service(二):Java 层
- 学习算法(5)——快速排序
- [PAT-乙级]1026.程序运行时间
- 【HTML5学习笔记】10:表单元素 其一
- JAVA常用API小知识
- windows关闭端口
- 做一下注册和登陆跳转界面
- [PAT-乙级]1027.打印沙漏
- 2017华东师范大学网赛-铁路修复计划
- Nova执行命令的原理