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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言入门——排序

發(fā)布時間:2025/3/11 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言入门——排序 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

排序的方法有很多種比較常見的便為:冒泡排序、選擇排序、插入排序、快速排序。

今天我們就圍繞著四種排序來說,如果有興趣的話可以去查找一下其他排序。

在排序這方面我們主要討論:

  • 穩(wěn)定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。
  • 不穩(wěn)定:如果a原本在b的前面,而a=b,排序之后 a 可能會出現(xiàn)在 b 的后面。
  • 時間復(fù)雜度:對排序數(shù)據(jù)的總的操作次數(shù)。反映當n變化時,操作次數(shù)呈現(xiàn)什么規(guī)律。
  • 空間復(fù)雜度:是指算法在計算機

一、冒泡排序

冒泡排序是一種簡單的排序算法。它重復(fù)地走訪過要排序的數(shù)列,一次比較兩個元素,如果它們的順序錯誤就把它們交換過來。走訪數(shù)列的工作是重復(fù)地進行直到?jīng)]有再需要交換,也就是說該數(shù)列已經(jīng)排序完成。這個算法的名字由來是因為越小的元素會經(jīng)由交換慢慢“浮”到數(shù)列的頂端。

算法描述:冒泡排序主要比較相鄰元素之間大小,從第一個元素開始比較,將較大的元素不斷向后移動,然后重復(fù)此操作,注意最后一個元素不需此操作。

算法演示圖:

代碼實現(xiàn):

void bulletSort(int arr[], int len)//冒泡排序 {int temp = 0;//作為交換的中間變量for (int i = 0; i < (len - 1); i++){for (int j = 0; j <( len-i-1); j++){if (arr[j]>arr[j + 1]){temp = arr[j+1];arr[j + 1] = arr[j];arr[j] = temp;}}} }

二、選擇排序

選擇排序(Selection-sort)是一種簡單直觀的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再從剩余未排序元素中繼續(xù)尋找最小(大)元素,然后放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。

算法描述:定義一個變量min,然后從數(shù)組中找到最小值賦值給min,然后交換a[i]與min的值。

算法演示圖:

void selectSort(int arr[], int len) {int min;int temp = 0;for (int i = 0; i < len - 1; i++){min = i;for (int j = i + 1; j < len; j++){if (arr[j]<arr[min])min = j;}temp = arr[i];arr[i] = arr[min];arr[min] = temp;} }

三、插入排序

插入排序(Insertion-Sort)的算法描述是一種簡單直觀的排序算法。它的工作原理是通過構(gòu)建有序序列,對于未排序數(shù)據(jù),在已排序序列中從后向前掃描,找到相應(yīng)位置并插入。

算法描述:從第一個元素開發(fā)就已被標記,然后將后面一個作為交換元素,將如果后面一個元素小于前面一個元素的話,那么將元素不斷的向左邊移動。

算法演示圖:

代碼實現(xiàn):

void insertSort(int arr[], int len) {int temp = 0;int j = 0;for (int i = 1; i < len; i++){j = i - 1;temp = arr[i];while(j >= 0 && arr[j]>temp){arr[j+1] = arr[j];j--;}arr[j + 1] = temp;} }

四快速排序:

快速排序的基本思想:通過一趟排序?qū)⒋庞涗浄指舫瑟毩⒌膬刹糠?#xff0c;其中一部分記錄的關(guān)鍵字均比另一部分的關(guān)鍵字小,則可分別對這兩部分記錄繼續(xù)進行排序,以達到整個序列有序。

算法描述:前面的三種排序相對于簡單,后面這一種快速排序就得浪費點腦力了,快速排序由C. A. R. Hoare在1962年提出。快速排序是對冒泡排序的一種改進,采用了一種分治的策略。通過一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小,然后再按此方法對這兩部分數(shù)據(jù)分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數(shù)據(jù)變成有序序列。

算法演示圖:

代碼實現(xiàn):

void quickSort(int arr[], int left, int right) {if (left >= right)return;int i = left, j = right, temp;while (i < j){while (i < j&&arr[left] < arr[j])j--;while (i<j&&arr[left]>=arr[i])i++;if (i < j){temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}//跳出循環(huán)則說明i==jtemp = arr[left];arr[left] = arr[i];arr[i] = temp;quickSort(arr, left, i - 1);quickSort(arr, i+1, right); }

如果大家想了解更多C語言知識的話可以關(guān)注我,或者來加入我們的公眾號:C語言進階之旅? 希望各位都能收獲到更多的C語言知識,在編程這條道路上越走越遠!!!

總結(jié)

以上是生活随笔為你收集整理的C语言入门——排序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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