日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

快速选择实例

發(fā)布時(shí)間:2023/12/4 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 快速选择实例 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

功能:查找集合S中第k個(gè)最小元。

快速選擇算法修改自快速排序算法,當(dāng)算法終止時(shí),第k個(gè)最小元就在位置k上。這破壞了原來(lái)的排序;如果不希望這樣,那么需要做一份拷貝。

快速選擇函數(shù):

/* quick_select.h */#ifndef _QUICK_SELECT_H #define _QUICK_SELECT_Hvoid qselect(int array[], int k, int left, int right);#endif /* quick_select.c */#include "quick_select.h" #include "common.h" #include "insertion_sort.h" #include "quick_sort.h"#define CUTOFF (3)/* places the kth smallest element in the kth position */ /* because arrays start at 0, this will be index k-1 */ void qselect(int array[], int k, int left, int right) {int i, j;int pivot;if(left + CUTOFF <= right){pivot = median3(array, left, right);i = left; j = right - 1;for(;;){while(array[++i] < pivot){}while(array[--j] > pivot){}if(i < j)swap(&array[i], &array[j]);else break;}swap(&array[i], &array[right - 1]);if(k <= i)qselect(array, k, left, i - 1);else if(k > i + 1)qselect(array, k, i + 1, right);}elseinsertion_sort(array + left, right - left + 1); }

其中,

common.h參考:http://www.cnblogs.com/nufangrensheng/p/3665397.html;

insertion_sort.h參考:http://www.cnblogs.com/nufangrensheng/p/3657887.html;

quick_sort.h參考:http://www.cnblogs.com/nufangrensheng/p/3669915.html

測(cè)試函數(shù):

/* quick_select_test.c */#include "quick_select.h" #include "common.h" #include <stdio.h>int main(void) {int array[] = {8, 4, 3, 2, 9, 0, 5, 7, 6, 1};printf("array :");print_array(array, 10);qselect(array, 3, 0, 9);printf("the 3th smallest element is %d\n", array[2]);return 0; }

測(cè)試結(jié)果:

總結(jié)

以上是生活随笔為你收集整理的快速选择实例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。