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

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

生活随笔

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

编程问答

掌握常见的内部排序方法(插入排序,冒泡排序,选择排序,快速排序,堆排序,希尔排序,归并排序,基数排序等)...

發(fā)布時(shí)間:2023/12/20 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 掌握常见的内部排序方法(插入排序,冒泡排序,选择排序,快速排序,堆排序,希尔排序,归并排序,基数排序等)... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
掌握常見(jiàn)的內(nèi)部排序方法(插入排序,冒泡排序,選擇排序,快速排序,堆排序,希爾排序,歸并排序,基數(shù)排序等)。數(shù)組高級(jí)以及Arrays(掌握)
排序方法空間復(fù)雜度時(shí)間復(fù)雜度穩(wěn)定性
直接插入排序O1平均On2最壞On2最好On穩(wěn)定
折半插入排序O1平均Onlogn最壞On2穩(wěn)定
希爾排序O1平均On2不穩(wěn)定
?????????? 冒泡排序O1平均On2最壞On2最好On穩(wěn)定
?????????? 快速排序平均Onlogn最壞On平均Onlogn最壞On2平均Onlogn不穩(wěn)定
?????????? 簡(jiǎn)單選擇排序O1始終On2不穩(wěn)定
?????????? 堆排序O1平均Onlogn建堆On調(diào)整Ologn不穩(wěn)定
歸并排序OnOnlogn穩(wěn)定
基數(shù)排序Od(n+r)Od(n+r)穩(wěn)定
(1)排序 A:冒泡排序???? 相鄰元素兩兩比較,大的往后放,第一次完畢,最大值出現(xiàn)在了最大索引處。同理,其他的元素就可以排好。???????????????? public static void bubbleSort(int[] arr) {?????????for(int x=0; x<arr.length-1; x++) {?????????? for(int y=0; y<arr.length-1-x; y++) {??????????????if(arr[y] > arr[y+1]) {???????????????int temp = arr[y];??????????????? arr[y] = arr[y+1];?????????????? arr[y+1] = temp;?????????????????? }??????????????? }????????????? }?????????? }????????? B:選擇排序?????????? 把0索引的元素,和索引1以后的元素都進(jìn)行比較,第一次完畢,最小值出現(xiàn)在了0索引。同理,其他的元素就可以排好。?????????????????public static void selectSort(int[] arr) {?????????? for(int x=0; x<arr.length-1; x++) {???????????? for(int y=x+1; y<arr.length; y++) {????????????????? if(arr[y] < arr[x]) {??????????????????? int temp = arr[x];??????????????????? arr[x] = arr[y];????????????????????arr[y] = temp;???????????????????? }???????????????? }????????????? }?????????? } C.插入排序算法:public static void insertSort(int[] arr) {????? for (int i = 1; i < arr.length; i++) {????????? if(arr[i]<arr[i-1]){???????? ? arr[0]=arr[i];????????? for(int j=i-1;arr[0]<arr[j];j--)//只要arr[i]大的都后移,找到arr[i]合適的插入位置?????????? arr[j+1]=arr[j];??????? arr[j+1]=arr[0];??????????? }??????? }??? }D希爾排序: /* * 希爾排序:先取一個(gè)小于n的整數(shù)d1作為第一個(gè)增量, * 把文件的全部記錄分成(n除以d1)個(gè)組。所有距離為d1的倍數(shù)的記錄放在同一個(gè)組中。 * 先在各組內(nèi)進(jìn)行直接插入排序;然后,取第二個(gè)增量d2<d1重復(fù)上述的分組和排序, * 直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有記錄放在同一組中進(jìn)行直接插入排序?yàn)橹埂? */public class ShellSort { public static void sort(int[] data) { for (int i = data.length / 2; i > 2; i /= 2) {//設(shè)置增量 for (int j = 0; j < i; j++) { insertSort(data, j, i); } } insertSort(data, 0, 1);}private static void insertSort(int[] data, int start, int inc) { for (int i = start + inc; i < data.length; i += inc) { for (int j = i; (j >= inc) && (data[j] < data[j - inc]); j -= inc){ SortTest.swap(data, j, j - inc); } } }} E.快速排序:Void Quicksort(int A[],int low,int high){? If(low<high){????? Int pivotpos= partion(A, low ,high);//獲取樞軸數(shù)位置????? Quicksort(A,? low,pivotpos-1); Quicksort(A,pivotpos-1,high)}}Int partion(int A[],int low ,int high){?? Int pivot=Alow];? While(low<high){ While(low<high&&A[high]>=pivot)? high--;//從樞軸小的左移?????? A[low]=A[high]; While(low<high&&A[low] <=pivot) low++;//從樞軸大的右移????? A[high] =A[low]; ?A[low]=pivot;???? //樞軸最后存放的位置? ?return low;?? }}F:歸并排序:public?static?int[] sort(int[] a,int?low,int?high){????????int?mid = (low+high)/2;????????if(low<high){????????????sort(a,low,mid);//分成兩個(gè)子序列,分別遞歸排序????????????sort(a,mid+1,high);????????????//左右歸并????????????merge(a,low,mid,high);????????}????????return?a;????}//將兩個(gè)有序表合并成一個(gè)有序表???public?static?void?merge(int[] a,?int?low,?int?mid,?int?high) {????????int[] temp =?new?int[high-low+1];//定義一個(gè)數(shù)組????????int?i= low;????????int?j = mid+1;????????int?k=0;????????//?把較小的數(shù)先移到新數(shù)組中????????while(i<=mid && j<=high){????????????if(a[i]<a[j]){???????????????temp[k++] = a[i++];????????????}else{???????????????temp[k++] = a[j++];????????????}????????}????????//?把左邊剩余的數(shù)移入數(shù)組?????????while(i<=mid){????????????temp[k++] = a[i++];????????}????????//?把右邊邊剩余的數(shù)移入數(shù)組????????while(j<=high){????????????temp[k++] = a[j++];????????}????????//?把新數(shù)組中的數(shù)覆蓋nums數(shù)組????????for(int?x=0;x<temp.length;x++){??????????a[x+low] = temp[x];//原數(shù)組從low開(kāi)始的????????}????}?G:堆排序//構(gòu)建大根堆:將array看成完全二叉樹(shù)的順序存儲(chǔ)結(jié)構(gòu)??? private int[] buildMaxHeap(int[] array){//從最后一個(gè)節(jié)點(diǎn)array.length-1的父節(jié)點(diǎn)(array.length-1/2開(kāi)始,直到根節(jié)點(diǎn)0,反復(fù)調(diào)整堆???????? for(int i=(array.length-1)/2;i>=0;i--){????????????? adjustDownToUp(array, i,array.length);????????? }????????? return array;????? }?????//將元素array[k]自下往上逐步調(diào)整樹(shù)形結(jié)構(gòu)???? private void adjustDownToUp(int[] array,int k,int length){???????? int temp = array[k];?????????? for(int i=2*k; i<length; i=2*i){??? //i為初始化為節(jié)點(diǎn)k的左孩子,沿節(jié)點(diǎn)較大的子節(jié)點(diǎn)向下調(diào)整???????????? if(i<length && array[i]<array[i+1]){? //取節(jié)點(diǎn)較大的子節(jié)點(diǎn)的下標(biāo)???????????????? i++;?? //如果節(jié)點(diǎn)的右孩子>左孩子,則取右孩子節(jié)點(diǎn)的下標(biāo)??????????? }???????????? if(temp>=array[i]){? //根節(jié)點(diǎn) >=左右子女中關(guān)鍵字較大者,調(diào)整結(jié)束???????????????? break;???????????? }else{?? //根節(jié)點(diǎn) <左右子女中關(guān)鍵字較大者? ???????????????array[k] = array[i];? //將左右子結(jié)點(diǎn)中較大值array[i]調(diào)整到雙親節(jié)點(diǎn)上??????????????? k = i; //【關(guān)鍵】修改k值,以便繼續(xù)向下調(diào)整???????????? }???????? }??????? array[k] = temp;? //被調(diào)整的結(jié)點(diǎn)的值放人最終位置??? }???//堆排序????? public int[] heapSort(int[] array){????????? array = buildMaxHeap(array); //初始建堆,array[0]為第一趟值最大的元素????????? for(int i=array.length-1;i>1;i--){????????????? int temp = array[0];? //將堆頂元素和堆低元素交換,即得到當(dāng)前最大元素正確的排序位置????????????? array[0] = array[i];???????????? array[i] = temp;??????????? adjustDownToUp(array, 0,i-1);? //整理,將剩余的元素整理成堆???????? }???????? return array;??? }(2)查找????? A:基本查找?????????? 針對(duì)數(shù)組無(wú)序的情況???????????????????? public static int getIndex(int[] arr,int value) {????????????? int index = -1;?????????????????????????? for(int x=0; x<arr.length; x++) {????????????????? if(arr[x] == value) {???????????????????? index = x;???????????????????? break;????????????????? }????????????? }?????????????????????????? return index;?????????? }?????? B:二分查找(折半查找)?????????? 針對(duì)數(shù)組有序的情況(千萬(wàn)不要先排序,在查找)???????????????????? public static int binarySearch(int[] arr,int value) {????????????? int min = 0;????????????? int max = arr.length-1;????????????? int mid = (min+max)/2;?????????????????????????? while(arr[mid] != value) {????????????????? if(arr[mid] > value) {???????????????????? max = mid - 1;????????????????? }else if(arr[mid] < value) {???????????????????? min = mid + 1;????????????????? }?????????????????????????? if(min > max) {???????????????????? return -1;????????????????? }???????????????????? mid = (min+max)/2;????????????? }???????????????????????? return mid;?????????? }?

轉(zhuǎn)載于:https://www.cnblogs.com/rqy0526/p/10954444.html

總結(jié)

以上是生活随笔為你收集整理的掌握常见的内部排序方法(插入排序,冒泡排序,选择排序,快速排序,堆排序,希尔排序,归并排序,基数排序等)...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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

主站蜘蛛池模板: 欧美一区二 | 国内精品久久99人妻无码 | 欧美午夜精品一区二区三区 | 国产一级一级 | 性一交一乱一色一视频麻豆 | 成人高潮片免费网站 | 久久久久久免费 | 久久久久亚洲精品国产 | 91精品91久久久中77777 | 黄色av播放 | 国产精品久久..4399 | 亚洲成人av片 | 欧美日韩综合一区二区三区 | 最近日韩中文字幕中文 | 久久久国产视频 | 亚洲精品乱码久久久久久不卡 | 亚洲欧美国产高清va在线播放 | 欧美久久久久久久久久 | 少妇精品久久久久www | 欧美一二三级 | 国模私拍视频在线 | 无码 制服 丝袜 国产 另类 | 少妇裸体视频 | 欧美亚洲成人网 | 亚洲综合精品在线 | 大尺度做爰床戏呻吟舒畅 | 韩国电影一区二区三区 | 精品理论片 | 日韩精品一区二区亚洲av性色 | 日韩爱爱网 | 色 综合 欧美 亚洲 国产 | 午夜亚洲福利在线老司机 | 国产高清自拍视频 | 99久久久国产精品 | www精品国产 | 人妻在线一区 | 色久网 | 老太脱裤让老头玩ⅹxxxx | 男人免费视频 | 欧美变态口味重另类在线视频 | 亚洲精品一区二区口爆 | 老牛影视一区二区三区 | 麻豆视频入口 | 五十路在线观看 | 日韩精品一区二区三区不卡 | 亚洲一区中文字幕永久在线 | 伊人三级 | 日韩激情av | 日韩av免费在线看 | 凹凸精品熟女在线观看 | 日韩欧美激情视频 | 成人一级片| 国产免费二区 | 美国一级大黄一片免费中文 | 黄瓜视频在线观看污 | 尹人av| 日本高清久久 | 在线观看国产欧美 | 香蕉亚洲 | 国产精品久久久久久久裸模 | 成人羞羞国产免费 | 欧美不卡一区 | 97神马影院 | 日韩porn| 少妇熟女一区 | 亚洲AV无码久久精品国产一区 | 校园春色自拍偷拍 | 国产九九九九 | 免费观看成年人网站 | 91视频直接看 | 亚洲国产成人精品激情在线 | 日本韩国欧美一区二区三区 | 在线观看日韩中文字幕 | 国产又粗又猛又爽又黄无遮挡 | 国产视频最新 | 在线观看福利片 | 九九九亚洲 | 日日干日日操 | 亚洲成人精选 | 精产国产伦理一二三区 | 99热2| 波多野结衣视频在线播放 | 中文一二三区 | 又欲又污又肉又黄短文 | 日韩一区二区在线视频 | 久久人妻精品白浆国产 | 亚洲一区二区在线观看视频 | 国产女主播在线一区二区 | 色视频免费看 | 另类三区 | 无码精品a∨在线观看中文 福利片av | 草草福利影院 | 一级伦理片 | 8050午夜一级毛片久久亚洲欧 | 亚洲国产一二 | 天海翼一区 | 欧美一级专区免费大片 | 午夜美女福利视频 | 久操福利在线 |