C語言中排序方法
學習目的
今天我們學習了三種排序方法:冒泡排序法、選擇排序法、插入排序法。
相關(guān)技術(shù),及其實用
為什么會使用排序:
為了是想同類型的不同數(shù)據(jù)按照想要的順序輸出。
怎么用:
冒泡法、選擇法、插入法
冒泡排序法:通過一次排序,使最大的沉底。例如:
int num[] = { 3,0,1,8,7,2,5,4,9 };
for (int i = 0; i < 10; i++) {//外層循環(huán) 比較的次數(shù)
for (int j = 0; j < 10- i-1; j++) {//內(nèi)層循環(huán) 如何比較
if (num[j] > num[j + 1]) {
//交換j 和j+1 的值
int temp = num[j+1];
num[j + 1] = num[j];
num[j] = temp;
}
}
}
選擇排序:一次取出一個值,默認他是最小的,如果發(fā)現(xiàn)不是這個數(shù)最小就交換,便利整個數(shù)組,找到一個最小的。例如:
int num[] = { 3,0,1,8,7,2,5,4,9 };
for (int i = 0; i < 10 - 1; i++) {
//默認這是最小的
for (int j = i + 1; j < 10 - 1; j++) {
//控制用min和后面的每一個進行比較
if (num[i] > num[j]) {
//j對應的數(shù)字比min還小 交換
int temp = num[i];
num[i] = num[j];
num[j] = temp;
}
}
//一次遍歷后找到最小的值
}
插入排序:取出一個數(shù),把他從開始到最后一直比較,比較合適就插進去,進行排序、邊插邊排。例如:
//插入排序法
//尋找這個數(shù)字對應的位置
int j = 0;
for (; j < i; j++) {
//j對應的數(shù)字和產(chǎn)生的數(shù)字進行比較
if (temp < originalArray[j]) {
//j后面的內(nèi)容往后移動 騰出空間
for (int k = i; k > j; k--) {
originalArray[k] = originalArray[k - 1];
}
break;
}
}
//保存到數(shù)組里面去
originalArray[j] = temp;
}
同時,可以看出數(shù)組在排序方法里面的缺點:雖然訪問方便,但插入和刪除效率不高。
感想
雖然學習了這三種排序方法知道了一些用法,但是,當要運用這些方法時,就感覺一臉懵,不知道選擇哪種排序方法更加的簡便,還是不夠清楚明了。同時呢,在邏輯思維方面還出現(xiàn)很大的不足,拿到一個demo只知道有具體有那幾個大部分,但是在大部分里面就不知道如何去實現(xiàn)。比如:在具體實現(xiàn)時,就拿猜數(shù)字的demo 來說,當寫到如何實現(xiàn)怎么進行移動時,具體的代碼如何實現(xiàn)就是一臉懵,難啊。