C語言學習之選擇排序


 

  上一篇文章中講C語言排序中的比較常見的(交換)冒泡排序,那么這篇文章也將以新手個人的經歷來講同樣比較常見而實用的數組排序之選擇排序。

  選擇排序,從字面上看是通過選擇來進行排序。其實它的用法就是通過選擇來進行排序的,我就以從小到大為例。設定一個臨時的變量用來儲存當前的最小值,如對第一位上該放置最小的數值,那么我要將第一位上的數值與后面位上的數進行值的比較,如果有比較的值比該數值小時則通過temp這個臨時變量進行兩值的交換,然后繼續將交換后的值與剩下的數進行比較,如還有更小的值則繼續交換值,否則不交換。這樣依次比較到最后一位時就把第一位上該放置的數值找出來了,后面第二位、第四位......同理的操作。
  我還是以  4  6  32  5  12  2  15  28  9  10  這10個數為例進行選擇排序,過程如下圖

(方框中的數值則表示當前要排序位置上的數值)

 

 

  代碼如下:

 

#include"stdio.h" //傳統交換法 int main(void) { int i, j; int temp, min; int a[10] = {4, 6, 32, 5, 12, 2, 15, 28, 9, 10}; for(j = 0; j < 10; j ++){ for(i = j + 1; i < 10; i ++){//從要進行排序位上的數值開始 與后面的數值依次進行比較                       //如有比其值小的則進行值的交換 然后繼續比較下去 若還有值比其小的繼續進行值的交換                       //否則不進行 if(a[j] > a[i]){ temp = a[i]; a[i] = a[j];//通過臨時變量進行值的交換操作 a[j] = temp; } } } for(i = 0; i < 10; i ++)//打印輸出 printf("%d ", a[i]); }

  由上圖和代碼,可以看出這個數值交換有點頻繁,想要一次完成怎么辦呢,那么就要進行優化了。就像下面這樣的思路,運用擂台法從數組中直接找出符合條件的值然后進行值的交換,一次就搞定了。

 

  代碼如下:

#include"stdio.h" //交換法 int main(void) { int i, j; int temp, min; int a[10] = {4, 6, 32, 5, 12, 2, 15, 28, 9, 10}; for(j = 0; j < 10; j ++){ for(i = j; i < 10; i ++){ min = a[j];//采用擂台法找出最小值 首先假定要排序的數位上的值為最小值 然后找出最小值 if(a[i] < min){ temp = a[i]; a[i] = min; min = temp; } a[j] = min;//將最小的值與該位進行交換  } } for(i = 0; i < 10; i ++)//打印輸出 printf("%d ",a[i]); }

  同樣的和(冒泡)交換排序一樣,此排序方法僅是適用於小數據的排序,對於大量的數據可以巧妙地運用其它方法綜合。希望本篇文章對你有所幫助,如你有更好的思路或者不懂 之處可在文章后留言。本文並非無錯誤之處,為博主個人總結而出,如有什么錯誤之處可聯系博主。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM