生活随笔
收集整理的這篇文章主要介紹了
c语言 快速排序
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
#include<stdio.h>
#include<stdlib.h>
#define BUF_SIZE 10
void display(int array[], int maxlen)
{
int i;
for(i = 0; i < maxlen; i++)
{
printf("%-3d", array[i]);
}
printf("
");
return ;
}
/********************************
*函數(shù)名:swap
*作用:交換兩個數(shù)的值
*參數(shù):交換的兩個數(shù)
*返回值:無
********************************/
void swap(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
return ;
}
/************************************
*函數(shù)名:quicksort
*作用:快速排序算法
*參數(shù):
*返回值:無
************************************/
void quicksort(int array[], int maxlen, int begin, int end)
{
int i, j;
if(begin < end)
{
i = begin + 1; // 將array[begin]作為基準數(shù),因此從array[begin+1]開始與基準數(shù)比較!
j = end; // array[end]是數(shù)組的最后一位
while(i < j)
{
if(array[i] > array[begin]) // 如果比較的數(shù)組元素大于基準數(shù),則交換位置。
{
swap(&array[i], &array[j]); // 交換兩個數(shù)
j--;
}
else
{
i++; // 將數(shù)組向后移一位,繼續(xù)與基準數(shù)比較。
}
}
/* 跳出while循環(huán)后,i = j。
* 此時數(shù)組被分割成兩個部分 --> array[begin+1] ~ array[i-1] < array[begin]
* --> array[i+1] ~ array[end] > array[begin]
* 這個時候將數(shù)組array分成兩個部分,再將array[i]與array[begin]進行比較,決定array[i]的位置。
* 最后將array[i]與array[begin]交換,進行兩個分割部分的排序!以此類推,直到最后i = j不滿足條件就退出!
*/
if(array[i] >= array[begin]) // 這里必須要取等“>=”,否則數(shù)組元素由相同的值時,會出現(xiàn)錯誤!
{
i--;
}
swap(&array[begin], &array[i]); // 交換array[i]與array[begin]
quicksort(array, maxlen, begin, i);
quicksort(array, maxlen, j, end);
}
}
// 主函數(shù)
int main()
{
int n;
int array[BUF_SIZE] = {12,85,25,16,34,23,49,95,17,61};
int maxlen = BUF_SIZE;
printf("排序前的數(shù)組
");
display(array, maxlen);
quicksort(array, maxlen, 0, maxlen-1); // 快速排序
printf("排序后的數(shù)組
");
display(array, maxlen);
return 0;
}
總結
以上是生活随笔為你收集整理的c语言 快速排序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。