#include<stdio.h>//快速排序 int main(){int a[]={2,1,5,4,3,8,9,6,7};int* b=a-1+sizeof(a)/4; //基准指针 int* i=a-1; //慢指针 int* j=a; //快指针 int QS(int* tb,int* ti,int* tj);QS(b,i,j);for(int k=0;k<sizeof(a)/4;k++){printf("%d ",a[k]);}
}//QuickSort int QS(int* tb,int* ti,int* tj){//如果数组空或只有一个数不用排序 if(tb<=tj){return0;}void swap...
简单排序:每次找出最大(小)的数,从头开始依次排序。 1publicstaticint[] simplySort(int a[]) {2for (int i = 0; i < a.length - 1; i++) {3// int min = a[i]; 4int minIndex = i;5for (int j =i + 1; j < a.length; j++) {6//我的代码7// if (a[j] < min) {8// min = a[j];9// minIndex = j;
10// }
11//老师代码12if (a[j] < a[minIndex])...
//选择排序基本思想就是:一个一个最值查找,然后排序//the simple insertSortWayvoid selectSort(int *a){int n = strlen(a);for(int k; k<n; k++){int l = k;for(int j; j<k; j++){if(a[j] > a[l]){l = j;}}int tmp = a[k];a[k] = a[l];a[l] = tmp; }
}//the nice insertSortWayvoid SelectSort(int r[],int n) { int i ,j , min ,max, tmp; for (i=1 ;i <= n/2;i++) { min = i; max = i ; for (j= i+1; j<= n-i; j++) { ...
与归并排序一样,快速排序使用也使用了分治的思想。下面是对一个典型的子数组A[p,...,r]进行快速排序的三步分治过程: 分解:数组A[p,...,r]被划分成两个(可能为空)子数组A[P,...,q-1]和A[q+1,...,r],使得A[p,...,q-1]中每个元素都小于等于A[q],而A[q]也小于等于A[q+1,...,r]中的每个元素。其中,计算下标q也是划分过程的一部分。 解决:通过递归调用快速排序,对子数组啊A[P,...,q-1]和A[q+1,...,r]进行排序。 合并:...
1/**********二分查找*****************/ 2int half_find(int *num,int size, int a)3{4int i=0;5int low=0;6int high=size-1;7int mid;//记录中间位置 8while(low<=high)9 {
10 mid = (low+high)/2;
11if(num[mid] == a)
12return mid;//返回所在位置13if(num[mid] > a)
14 high = mid-1;//减去大的那一半15if(num[mid] <a)
16 low = mid+1;//减去小的那半17 }
18returnfalse;//没找到19}
...
第六章 堆排序最小堆和最大堆:近似的完全二叉树A[parent(i)]<=A[i]或者A[parent(i)]>=A[i]建堆复杂度O(n)排序O(nlgn)实际应用中,快速排序一般优于堆排序。可用于优先队列等。在一个包含n个元素的堆中,所有优先队列的操作均可在O(lgn)时间内完成。 第七章 快速排序与归并排序一样用分治思想主元pivot可随机生成 原文:http://www.cnblogs.com/justinh/p/6518639.html
当待排序元素序列中有大量的重复排序码时,简单的快速排序算法的效率将会降到非常之低。一种直接的想法就是将待排序列分成三个子序列:一部分是排序码比基准元素排序码小的;一部分是与基准元素排序码等值的;一部分是比基准元素排序码大的,如下图所示:
但是,如果我们直接据此思想去编写实现算法的话,会让我们面临很大的困难。与基准元素等值的元素到底有多少?以及如何最快速有效地确定划分的边界?所以,完成这样的三路划分...
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。【来自百度百科】快排介绍老样子,前面有介绍快排思路快速排序,在学习的时候,老师就说,快排,是分而治之。就像中国 960 万疆土,分成省市县镇乡村去管辖。这就是分而治之。在各自的辖区内,各自管辖,互不干涉,最...
public class HelloJava{ public static void main(String[] args) { int[] arr1 = new int[] {45,40,90,30,80,70,50}; System.out.println("排序前: "); for(int i=0; i<arr1.length; i++) { System.out.print(arr1[i]+" "); } System.out.println(); System.out.println("快速排序后:"); quickSort(arr1, 0, arr1.length-1); int[] arr2 = new int[] {11,52,4,5,65,4,2,1,45}; System.out.println("排序前: "...
快速排序是一种在大多数情况下比冒泡排序效率更高(详情参考有关算法复杂度的文章)的算法。注意:许多编程语言内置的排序 API 底层实现便是基于快速排序。ES5 与 ES6 语法在实现该算法时区别不大,以下仅提供 ES5 版本。function quickSort(arr) {var len = arr.length;if (len <= 1) {return arr.slice(0); // 注意用 slice 可防范 arr[0] 为 undefined }var left = [], right = [], mid = [];mid.push(arr[0]);for (var i = 1; ...
快排的时间复杂度O(nlogn)-O(N^2),空间复杂度为O(long2n)-O(N)传统的快排与优化的快排的优化之处在于,传统的左边每次都保存着小于等于target即x的数值,包含着x,下次对左边的再次进行快排,还是要比较x,优化的把 等于x放在中间,减少了重复元素的比较次数。当origin[cur]>origin[more] 的时候,将origin[cur]和origin[more-1]交换,cur不变,more--。当origin[cur]=origin[more] 的时候,cur++;当origin[cur]<origin[more] 的时...
1 #include<iostream>2usingnamespace std;3 4//************快速排序法********* 5int partiton(int array[10],int s,int t,int &cutpoint){6int x=array[s];7int i,j;8 i=s;9 j=t;
10while(i!=j){
11while(i<j&&array[j]>x)j--;
12if(i<j){
13 array[i]=array[j];
14 i++;
15 }
16while(i<j&&array[i]<x)i++;
17if(i<j){
18 array[j]=array[i];
19 j--;
20 ...
快速排序算法。python实现。 1# -*- coding: utf8 -*- 2 3import random4 5def partition(mylist, low, high):6 pivotkey = mylist[low]7while low < high:8while low < high and mylist[high] >= pivotkey:9 high -= 1
10 mylist[low] = mylist[high]
11while low < high and mylist[low] <= pivotkey:
12 low += 1
13 mylist[high] = mylist[low]
14 mylist[low] = pivotkey
15...
目录简单介绍基本思想思路分析代码实现推导实现完整实现大数据量耗时测试性能分析简单介绍快速排序(Quicksort) 是对 冒泡排序的一种改进。基本思想快速排序算法通过多次比较和交换来实现排序,其排序流程如下:(1)首先设定一个分界值(基准值),通过该分界值将数组分成左右两部分。(2)将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于或等于分界值,而右边部分中各元素...
一、1.特点(1)The quicksort algorithm’s desirable features are that it is in-place (uses only a small auxiliary stack) and thatit requires time proportional to N log N on the average to sort an array of length N.(2)quicksort has a shorter inner loop than most other sorting algorithms, which means that it is fast in practice as well as in theory. 2.缺点:(1)Its primary drawback is that it is fragi...