快速排序及C语言实现
排序系列之(3)快速排序及C語言實現 收藏
快速排序(Quicksort)是對冒泡排序的一種改進。由C. A. R. Hoare在1962年提出。它的基本思想是:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然后再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。
快速排序的劃分過程還有一個作用就是可以用來尋找中位數
以下是其C語言源碼實現
view plaincopy to clipboardprint?
#include "stdio.h"??
#include "stdlib.h"??
#include "sort.h"??
int partition(int* array,int low,int high)??
{??
??? int i=0;??
??? int pivot = array[low];??
??? while(low < high)??
??? {??
??????? while(low<high && array[high] >= pivot )??
??????? {??
??????????? high--;???
??????? }??
??????? if(low < high)??
??????? {??
??????????? array[low++] = array[high];??
??????? }??
??????????
??????? while(low<high && array[low] <= pivot)??
??????? {??
??????????? low++;??
??????? }??
??????? if(low < high)??
??????? {??
??????????? array[high--] = array[low];??
??????? }??
??? }??
??? array[low] = pivot;??
??? printf("partition--- and pivot is %d /n",pivot);??
??? for(;i<5;i++)??
??? {??
??????? printf("%d ",array[i]);??
??? }??
??? printf("/n");??
??? return low;??
}??
???
void qsort(int *array,int low,int high)??
{??
??? int i;??
??? if(low < high)??
??? {??
??????? i = partition(array,low,high);??
??????? qsort(array, low, i-1);??
??????? qsort(array, i+1, high);??
??? }??
}??
int kthsort(int *array,int low,int high,int k)??
{??
??? int i;??
??? if(low < high)??
??? {??
??????? i= partition(array,low,high);??
??????? if(i==k)??
??????????? return i;??
??????? else if(k < i )??
??????????? kthsort(array,low, i-1,k);??
??????? else???
??????????? kthsort(array,i+1,high,k);??
??? }??
}??
void qsorttest()??
{??
??? int array[5] = {5,7,8,3,2};??
??? int len= 5;??
??? int i=0;??
??? printf("%d /n",len);??
??? for(i=0; i< len; i++)??
??? {??
??????? printf("%d ",array[i]);??
??? }??
??? printf("Hello World!/n");??
??? qsort(array,0,4);??
??????
??? printf("Hello World!/n");??
??? for(i=0; i< len; i++)??
??? {??
??????? printf("%d ",array[i]);??
??? }??
??? printf("Hello World!/n");??
}??
void kthsorttest()??
{??
??? int array[5] = {5,7,8,3,2};??
??? int len= 5;??
??? int i=0;??
??? printf("%d /n",len);??
??? for(i=0; i< len; i++)??
??? {??
??????? printf("%d ",array[i]);??
??? }??
??? printf("The result is %d /n",array[kthsort(array,0,4,3)]);??
??????
}?
?
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/taizhoufox/archive/2010/10/22/5959387.aspx
總結
以上是生活随笔為你收集整理的快速排序及C语言实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 希尔排序及C语言实现
- 下一篇: 任意进制转换的递归实现