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

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

生活随笔

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

编程问答

c语言sort_C语言十大排序算法,让老师对你刮目相看的技巧

發(fā)布時(shí)間:2024/7/23 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言sort_C语言十大排序算法,让老师对你刮目相看的技巧 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

排序算法作為數(shù)據(jù)結(jié)構(gòu)的重要部分,系統(tǒng)地學(xué)習(xí)一下是很有必要的。

十種常見(jiàn)排序算法可以分為兩大類(lèi):

比較類(lèi)排序:通過(guò)比較來(lái)決定元素間的相對(duì)次序,由于其時(shí)間復(fù)雜度不能突破O(nlogn),因此也稱(chēng)為非線(xiàn)性時(shí)間比較類(lèi)排序。

非比較類(lèi)排序:不通過(guò)比較來(lái)決定元素間的相對(duì)次序,它可以突破基于比較排序的時(shí)間下界,以線(xiàn)性時(shí)間運(yùn)行,因此也稱(chēng)為線(xiàn)性時(shí)間非比較類(lèi)排序。

全部排序代碼整理:

鏈接:https://pan.baidu.com/s/1c02Nfm8PjXg0PQtFRv6F1A

提取碼:rjnq

1、冒泡排序

它重復(fù)地走訪(fǎng)過(guò)要排序的元素列,依次比較兩個(gè)相鄰的元素
  • 動(dòng)圖演示

  • 代碼實(shí)現(xiàn)
void

2、選擇排序

選擇排序(Selection sort)是一種簡(jiǎn)單直觀的排序算法。它的工作原理是:第一次從待排序的數(shù)據(jù)元素中選出最小(或最大)的一個(gè)元素,存放在序列的起始位置,然后再?gòu)氖S嗟奈磁判蛟刂袑ふ业阶钚?#xff08;大)元素,然后放到已排序的序列的末尾。以此類(lèi)推,直到全部待排序的數(shù)據(jù)元素的個(gè)數(shù)為零。
  • 動(dòng)圖演示

  • 代碼實(shí)現(xiàn)
void SelectSort(int arr[], int n) {for (int i = 0; i < n - 1; i++){for (int j = i + 1; j < n; j++){if (arr[i] > arr[j]){swap(arr, i, j); //交換arr數(shù)組arr[i]和arr[j]的值}}} }

3、插入排序

插入排序的基本操作就是將一個(gè)數(shù)據(jù)插入到已經(jīng)排好序的有序數(shù)據(jù)中,從而得到一個(gè)新的、個(gè)數(shù)加一的有序數(shù)據(jù)
  • 動(dòng)圖演示

  • 代碼實(shí)現(xiàn)
void InsertSort(int arr[], int n) {int tempVal;for (int i = 1, j; i < n; i++){tempVal = arr[i]; //保存要插入的值for (j = i - 1; tempVal < arr[j] && j >= 0; --j) //數(shù)據(jù)往后移動(dòng),給要插入的值騰位{arr[j + 1] = arr[j];}arr[j + 1] = tempVal; //插入數(shù)據(jù)} }

4、快速排序

通過(guò)一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小,然后再按此方法對(duì)這兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序,整個(gè)排序過(guò)程可以遞歸進(jìn)行,以此達(dá)到整個(gè)數(shù)據(jù)變成有序序列
  • 動(dòng)圖演示

  • 代碼實(shí)現(xiàn)
void Quicksort(int a[], int low, int high) {if (low >= high){return;}int first = low;int last = high;int key = a[first];while (first<last){while (first < last && a[last] >= key) //從右往左找一個(gè)比arr[left]小的值{--last;}a[first] = a[last];while (first < last && a[first] <= key) //從左往右找一個(gè)比arr[left]要大的值{++first;}a[last] = a[first];}a[first] = key;Quicksort(a, low, first - 1); //排左邊Quicksort(a, last + 1, high); //排右邊 }

5、希爾排序

希爾排序,也稱(chēng)遞減增量排序算法,是插入排序的一種更高效的改進(jìn)版本。但希爾排序是非穩(wěn)定排序算法。插入排序是將未排序的數(shù)字插入到已排序數(shù)列中,而希爾排序是將一個(gè)已排序的數(shù)列插入到另一個(gè)已排序的數(shù)列中。
  • 圖片演示

  • 代碼實(shí)現(xiàn)
void ShellSort(int arr[], int n) {int tempVal, j;int jump = n >> 2; //步長(zhǎng)值while (jump != 0){for (int i = jump; i < n; i++){tempVal = arr[i]; //保存待排序的第一個(gè)數(shù),也就是待插入的數(shù)for (j = i - jump; j >= 0 && tempVal < arr[j]; j -= jump){arr[j + jump] = arr[j];}arr[j + jump] = tempVal;}jump = jump >> 1; //步長(zhǎng)值減半} }

6、歸并排序

將已有序的子序列合并,得到完全有序的序列;即先使每個(gè)子序列有序,再使子序列段間有序。若將兩個(gè)有序表合并成一個(gè)有序表
  • 動(dòng)圖演示

  • 代碼實(shí)現(xiàn)
void MergeSort(int arr[], int left, int right) {if (left >= right)//遞歸的終止條件,left == right證明這個(gè)區(qū)間只有一個(gè)元素,不需要再拆了return;int mid = ((right - left) >> 1) + left;//求中點(diǎn)MergeSort(arr, left, mid); //拆分左MergeSort(arr, mid + 1, right); //拆分右//并操作_merge_in_arr(arr, left, mid, right); }void _merge_in_arr(int arr[], int left, int mid, int right) {int length = right - left + 1; //定義一個(gè)輔助的空間的長(zhǎng)度int *pData = (int*)malloc(sizeof(int)*length);//分配一個(gè)動(dòng)態(tài)內(nèi)存來(lái)調(diào)整元素的位置memset(pData, 0, sizeof(int)* length);//合并int low = left; //左邊區(qū)間的起始下標(biāo)int hig = mid + 1; //右邊區(qū)間的起始下標(biāo)int index = 0; //輔助數(shù)組的下標(biāo)while (hig <= right)//右區(qū)間沒(méi)有合并完{while (low <= mid && arr[low] <= arr[hig])//證明左區(qū)間沒(méi)有合并完,且左區(qū)間的值小于右區(qū)間的值{pData[index] = arr[low]; //把左邊的值放進(jìn)輔助數(shù)組low++; //左邊往高位移,下一次需要判斷左邊的新下標(biāo)index++; //下一次放進(jìn)輔助數(shù)組的新下標(biāo)}if (low > mid) //證明左區(qū)間已經(jīng)放完break;while (hig <= right && arr[low] > arr[hig])//證明右區(qū)間沒(méi)有合并完,且左區(qū)間的值大于右區(qū)間的值{pData[index] = arr[hig]; //把右邊的值放進(jìn)輔助數(shù)組hig++; //右邊往高位移,下一次需要判斷右邊的新下標(biāo)index++; //下一次放進(jìn)輔助數(shù)組的新下標(biāo)}}//到這一步,證明起碼有一個(gè)區(qū)間已經(jīng)合并完成if (hig <= right) //證明右邊沒(méi)有完成memmove(&pData[index], &arr[hig], sizeof(int)* (right - hig + 1));if (low <= mid) //證明左邊沒(méi)有完成memmove(&pData[index], &arr[low], sizeof(int)* (mid - low + 1));//把所有區(qū)間都合并到了輔助區(qū)間memmove(&arr[left], pData, sizeof(int)* length);free(pData); //釋放空間 }

7、桶(基數(shù))排序

桶排序是典型的空間換時(shí)間,在對(duì)整數(shù)排序中,沒(méi)有什么算法能比它還快,但是在空間浪費(fèi)上,它是祖宗。
  • 動(dòng)圖演示

  • 代碼實(shí)現(xiàn)
void radix_sort(int arr[], size_t len) {int**temp = (int **)malloc(sizeof(int) * 10); //10行//申請(qǐng)動(dòng)態(tài)內(nèi)存 輔助數(shù)組temp[10][];for (int i = 0; i < 10; i++){temp[i] = (int *)malloc(sizeof(int)*len);}for (int i = 1; i <= 100; i *= 10)//循環(huán)數(shù)值可能有的位數(shù){for (int x = 0; x < 10; ++x)//輔助數(shù)組行循環(huán){for (int y = 0; y < len; ++y)//輔助數(shù)組列循環(huán){temp[x][y] = -1;//輔助數(shù)組的初始化賦值,-1表示在arr里面不可能出現(xiàn)的數(shù)值 }}//arr數(shù)組中的元素放入輔助數(shù)組for (int m = 0; m < len; ++m){int index = (arr[m] / i) % 10;temp[index][m] = arr[m];}//把輔助數(shù)組的內(nèi)容放回待排序數(shù)組int k = 0;//待排序的下標(biāo)for (int x = 0; x < 10; x++){for (int y = 0; y < len; ++y){if (temp[x][y] != -1)arr[k++] = temp[x][y];}}}//釋放內(nèi)存for (int i = 0; i < 10; i++){free(temp[i]);}free(temp); }

在這里我列舉了7中常見(jiàn)的排序算法并用C語(yǔ)言實(shí)現(xiàn),你們可能就要問(wèn)了,不是十種嗎?怎么還能缺斤短兩,不是我不會(huì)寫(xiě)啊,是寫(xiě)起來(lái)麻煩,你們也用不到后面那幾種,跟別說(shuō)去研究了,能看懂常見(jiàn)的七種排序算法你就能在學(xué)校里橫著走了。


編輯:夢(mèng)凡

微信公眾號(hào):編程學(xué)習(xí)基地

總結(jié)

以上是生活随笔為你收集整理的c语言sort_C语言十大排序算法,让老师对你刮目相看的技巧的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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

主站蜘蛛池模板: 99精品在线 | 男人的天堂aa | 小辣椒福利视频导航 | 久久亚洲精品石原莉奈 | 久久桃花网| 啪啪自拍视频 | 国产免费网址 | 精品一二三区 | 好邻居韩国剧在线观看 | 亚洲中文字幕无码av永久 | 免费av高清 | 成年人网站免费在线观看 | 三上悠亚在线观看一区二区 | 日韩精品极品 | 黄色不雅视频 | 日韩视频一区在线 | 欧美极品少妇无套实战 | 精品日韩制服无码久久久久久 | www.超碰在线 | 国产精品三级视频 | 17c在线 | 精品人妻一区二区三区久久 | 五月天在线 | 亚洲综合久 | 久久666 | 成年人免费在线观看 | 日韩伦理中文字幕 | 久久国产精品久久久久久 | 国产精品va无码一区二区 | 久久天天东北熟女毛茸茸 | 羞辱狗奴的句子有哪些 | xxsm.com| 永久免费的网站入口 | 97国产精品| 久久人人爱 | 欧美成人精品一区二区免费看片 | 国产一区二区三区在线免费观看 | 少妇综合网| 成年人拍拍视频 | 男朋友是消防员第一季 | 99免费 | 午夜在线免费观看 | 伊人国产在线观看 | www.99re7.com | 日日操夜夜撸 | 午夜宅男影院 | 久久伊人影院 | 黄色成人免费观看 | 日本黄色播放器 | 日本欧美在线观看 | 边打电话边做 | 免费成人深夜小野草 | 91免费看. | 久久久不卡 | 91精品国产综合久久国产大片 | 第一章婶婶的性事 | 中文字幕视频网站 | 成人视屏在线 | 欧美日韩亚洲激情 | 草逼视频网 | 精东传媒在线 | 白石茉莉奈黑人 | 日本人妻丰满熟妇久久久久久 | 日本精品一区二区在线观看 | 亚洲国产欧美一区二区三区深喉 | 亚洲第一第二区 | 午夜一级片 | 亚洲va在线观看 | 久久一区二区视频 | 台湾佬中文在线 | 免费黄色的网站 | 三级爱爱 | 亚洲天堂av女优 | 女人张开腿让男人桶爽 | 亚洲成人福利 | 欧美激情69 | 成人午夜免费网站 | 黑人巨大精品一区二区在线 | 欧美日韩在线一区二区 | 97精品人妻一区二区三区香蕉 | 在线永久看片免费的视频 | 色视频一区 | 91免费版黄 | 成人免费视频毛片 | 亚洲免费国产视频 | 欧美亚洲一二三区 | 穿情趣内衣被c到高潮视频 欧美性猛交xxxx黑人猛交 | 日韩第一区 | 一区二区成人网 | 国产盗摄视频在线观看 | 日韩高清在线一区二区 | 久草欧美视频 | 亚洲一区二区三区免费看 | 久综合 | 一级黄色在线观看 | 欧美日韩一级二级 | 亚洲一区中文字幕 | 91网站免费视频 | 成人区人妻精品一区二区不卡视频 |