快速排序算法采用分治法思想;快速排序是冒泡排序的一种改进;
快速排序的标志位的选取有一下几种情况:
1.每次都取第一个元素,这样操作简单,但是效率不一定高
2.每次都取最后一个元素,同上
3.随机产生一个下标,用此下标所表示的数字作为标志位
4.随机产生一个下标,用此下标所表示的数字与第一个元素交换,剩下的操作同1
代码如下(每次选取第一个元素作为标志位):
QuickSort.c文件如下:
#include "QuickSort.h" void QuickSort(int R[],int s,int t)//使数据最快的达到目的位置;是随机选择一个数,还是选择第一个数, //肯定选择第一个操作简单,但是效率不见得高 { int i, j, temp; if(s>=t) //只剩一个数据的时候返回 return; i=s, j=t; temp=R[s]; while(i!=j) { while((j>i) && (R[j]>temp))//先从后边操作的原因是可以与第一个交换, //因为第一个数已经保存在temp里了,以此类推,每次交换覆盖的都是垃圾值 { j--; } if(i<j) { R[i]=R[j]; i++; } while((i<j) && (R[i]<temp)) { i++; } if(i<j) R[j--]=R[i];//先赋值,再自减 } R[i]=temp;//R[j]=temp;也行 QuickSort(R, s, i-1); QuickSort(R, i+1, t); }
QuickSort.h文件如下:
#ifndef _QUICKSORT_H_ #define _QUICKSORT_H_ void QuickSort(int f[],int s,int t); #endif //_QUICKSORT_H_
Test.c文件如下:
#include "QuickSort.h" #include <stdio.h> int main() { int i; int nArray[]={1, 3, 2, 9, 4, 7, 8, 2, 7, 4}; QuickSort(nArray, 0, sizeof(nArray)/sizeof(*nArray)-1); for(i=0;i<sizeof(nArray)/sizeof(*nArray);i++) printf("%d ",nArray[i]); return 0; }
Python代码QuickSort.py如下:
#!/usr/bin/python def QuickSort(num,s,t): if s >= t: return b = s e = t temp = num[s] while b != e: while (b < e) and (num[e] > temp): e -= 1 if b < e: num[b]=num[e] b+=1 while (b < e) and (num[b] < temp): b+=1 if b < e: num[e]=num[b] e -= 1 num[b] = temp QuickSort(num,s,b-1) QuickSort(num,b+1,t) numbers = [3,1,2,7,0,8,10,-5,9,4] print numbers QuickSort(numbers,0,len(numbers)-1) print numbers