快排原始碼
昨天看了一下午的快排,終於寫出了快排,並且測試通過,現貼出與大家共享。
/*
*作者:xautjzd
*時間:2013-3-5
*功能:快速排序
**/
#include <stdio.h>
void quickSort(int a[],int left,int right);
void swap(int *x,int *y);
int main(){
int array[]={10,9,8,7,6,5,4,3,2,1};
quickSort(array,0,9);
int i=0;
for(i=0;i<10;i++)
printf("%d ",array[i]);
printf("\n");
return 0;
}
void quickSort(int a[],int left,int right){
int i=left,j=right;
int pivot=a[left]; //設最左的待排陣列為基數
for(;;){
while(i<j&&a[j]>=pivot) //j從右到左找比基數小的數
j--;
while(i<j&&a[i]<=pivot) //i從左到右找比基數大的數
i++;
if(i<j) //i<j,交換找出符合條件的兩數
swap(&a[i],&a[j]);
else //否則第一次迴圈結束,i左側的數比基數都小,i右側的數比基數都大
break;
}
swap(&a[i],&a[left]);
if(left<right) //判斷陣列長度是否大於1,至少有兩數才需繼續遞迴
quickSort(a,left,i-1);
if(left<right)
quickSort(a,i+1,right);
}
void swap(int *x,int *y){
int temp=*x;
*x=*y;
*y=temp;
}
下列程式碼是參考網上的程式碼,也一併貼出
#include <stdio.h>
void quickSort(int numbers[], int array_size);
void q_sort(int numbers[], int left, int right);
int main(){
int array[]={7,4,6,9,1,3,8,2,10,5};
quickSort(array,10);
int i=0;
for(i=0;i<10;i++)
printf("%d ",array[i]);
printf("\n");
return 0;
}
void quickSort(int numbers[], int array_size)
{
q_sort(numbers, 0, array_size - 1);
}
void q_sort(int numbers[], int left, int right)
{
int pivot, l_hold, r_hold;
l_hold = left;
r_hold = right;
pivot = numbers[left];
while (left < right)
{
while ((numbers[right] >= pivot) && (left < right))
right--;
if (left != right)
{
numbers[left] = numbers[right];
left++;
}
while ((numbers[left] <= pivot) && (left < right))
left++;
if (left != right)
{
numbers[right] = numbers[left];
right--;
}
}
numbers[left] = pivot;
pivot = left;
left = l_hold;
right = r_hold;
if (left < pivot)
q_sort(numbers, left, pivot-1);
if (right > pivot)
q_sort(numbers, pivot+1, right);
}
或者
#include<stdio.h>
void quicksort(int x[],int,int);
int main(){
int x[100],size,i;
printf("Enter size of the array: ");
scanf("%d",&size);
printf("Enter %d elements: ",size);
for(i=0;i<size;i++)
scanf("%d",&x[i]);
quicksort(x,0,size-1);
printf("Sorted elements: ");
for(i=0;i<size;i++)
printf(" %d",x[i]);
return 0;
}
void quicksort(int x[],int first,int last){
int pivot,j,temp,i;
if(first<last){
pivot=first;
i=first;
j=last;
while(i<j){
while(x[i]<=x[pivot]&&i<last)
i++;
while(x[j]>x[pivot])
j--;
if(i<j){
temp=x[i];
x[i]=x[j];
x[j]=temp;
}
}
temp=x[pivot];
x[pivot]=x[j];
x[j]=temp;
quicksort(x,first,j-1);
quicksort(x,j+1,last);
}
}
相關文章
- 二:快排程式碼
- 快排分析
- MyBatis快取原始碼分析MyBatis快取原始碼
- SOFA 原始碼分析— 事件匯流排原始碼事件
- goroutine排程原始碼閱讀筆記Go原始碼筆記
- golang 原始碼分析之scheduler排程器Golang原始碼
- Mybatis的快取——一級快取和原始碼分析MyBatis快取原始碼
- go 原始碼分析 goroutine 概覽與排程Go原始碼
- Golang的GMP排程模型與原始碼解析Golang模型原始碼
- myBatis原始碼解析-快取篇(2)MyBatis原始碼快取
- lodash原始碼分析之List快取原始碼快取
- lodash原始碼分析之Hash快取原始碼快取
- 【Algorithm】快排分割槽方法Go
- 面試官,您要的快排面試
- 用js實現快排JS
- 【資料結構】快排!!!資料結構
- 「從零單排canal 07」 parser模組原始碼解析原始碼
- 「從零單排canal 05」 server模組原始碼解析Server原始碼
- Linux程式排程邏輯與原始碼分析Linux原始碼
- 排隊免單系統原始碼架構分析原始碼架構
- OkHttp 原始碼分析(二)—— 快取機制HTTP原始碼快取
- mybaits原始碼分析--快取模組(六)AI原始碼快取
- .Net Core快取元件(MemoryCache)原始碼解析快取元件原始碼
- RecyclerView 原始碼分析(二) —— 快取機制View原始碼快取
- OkHttp3原始碼分析[快取策略]HTTP原始碼快取
- OkHttp 3.7原始碼分析(四)——快取策略HTTP原始碼快取
- TMCache原始碼分析(二)---TMDiskCache磁碟快取原始碼快取
- 【MyBatis原始碼解析】MyBatis一二級快取MyBatis原始碼快取
- 「從零單排canal 06」 instance模組原始碼解析原始碼
- 「從零單排canal 03」 canal原始碼分析大綱原始碼
- swoole 協程原始碼解讀 (協程的排程)原始碼
- Java排程執行緒池ScheduledThreadPoolExecutor原始碼分析Java執行緒thread原始碼
- RxJava原始碼解析(二)—執行緒排程器SchedulerRxJava原始碼執行緒
- Go排程器系列(4)原始碼閱讀與探索Go原始碼
- Linux 核心排程器原始碼分析 - 初始化Linux原始碼
- kube-scheduler原始碼分析(3)-搶佔排程分析原始碼
- spark streaming原始碼分析3 排程及執行Spark原始碼
- OkHttp 原始碼剖析系列(三)——快取機制HTTP原始碼快取