标签:
排序在各次面试的过程中问道的次数不少,冒泡排序和快速排序尤多。因此做一些总结,尤其是代码部分。
1. 冒泡排序
(1)思想
在一组数中,对当前未排好序的数,自上而下地对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的数往上冒。
(2)复杂度
bubblesort(A) { for i=1 to length[A] // 排序的趟数 { for j=length[A] to i+1 // 对未排序的数进行比较 { if A[j]<A[j-1] // 若相邻两个数中前者大于后者 { exchange A[j] and A[j-1]; // 进行交换,将小数往上冒 } } } }
bubblesort(A) { for i=1 to length[A] // 排序的趟数 { for j=1 to length[A]-i // 对未排序的数进行比较 { if A[j]<A[j-1] // 若相邻两个数中前者大于后者 { exchange A[j] and A[j-1]; // 进行交换,将大数往下沉 } } } }
void bubble_sort(int a[], int length) { if(a == NULL || length == 0) return; for(int i=0; i<length; i++) { for(int j=length-1; j>i; j--) { if(a[j-1] > a[j]) { int tmp=a[j]; a[j]=a[j-1]; a[j-1]=tmp; } } } }
void bubble_sort(int a[], int length) { if(a == NULL || length == 0) return; for(int i=0; i<length; i++) { for(int j=0; j<length-i; j++) { if(a[j-1] > a[j]) { int tmp=a[j]; a[j]=a[j-1]; a[j-1]=tmp; } } } }
PARTITION(A, p, r) { x=A[r]; // 以最后一个值为基准值 i=p-1; for j=p to r-1 { if A[j]<=x { i=i+1; // i用来记录比基值小的元素的最大索引,可理解为比基准小的元素数量 exchange A[i] and A[j]; // 将比基值小的放左边,大的放右边 } } exchange A[i+1] and A[r]; // 将基值交换到切分点上 return i+1; } QUICKSORT(A, p, r) { if p<r { q=PARTITION(A, p, r); QUICKSORT(A, p, q-1); QUICKSORT(A, q+1, r); } }
int partition(int A[], int low, int high) { int pivot=A[high]; int i=low-1; for(int j=low; j<high; j++) { if(A[j]<=pivot) { i++; swap(A[i], A[j]); } } swap(A[i+1], A[high]); return i+1; } void quicksort(int A[], int low, int high) { if(low<high) { int q=partition(A, low, high); quicksort(A, low, q-1); quicksort(A, q+1, high); } } void swap(int &a, int &b) { int tmp=a; a=b; b=tmp; }
标签:
原文地址:http://blog.csdn.net/field42zhw/article/details/51345397