本文目錄一覽:
- 1、c語言選擇法中k值的作用是什麼?
- 2、c語言選擇法排序的最後t=array[k];array[k]=array[i];array[i]=t這段是什麼意思
- 3、c語言選擇法
- 4、C語言 選擇法排序 劃線的地方 k為什麼不能寫成i
- 5、請問C語言選擇排序的代碼中引入“k”具體有什麼作用?
c語言選擇法中k值的作用是什麼?
就是交換array[k]和array[i]中的數據。
為什麼要這樣呢?
生活中你想想,一個杯子里是酒精,一個杯子里是牛奶,如何把他們相互交換,肯定要藉助一個空杯子中轉一下。
例如:a
酒精
b牛奶
c空杯子
c-a
a-b
b-c
這裡t就是那個空杯子。一個道理!
c語言選擇法排序的最後t=array[k];array[k]=array[i];array[i]=t這段是什麼意思
這組語句是交換兩個元素的位置。
下面以升排序為例。
進入j循環前,k = i,假定最小,然後與後面的元素逐個比較,如果元素array[j] array[k],則記錄這個元素的下標(k = j;),否則再與下一個元素進行比較,直到最後一個元素,此時,k記錄的元素是最小的,至於是否有比arra[i]更小的,則通過比較i與k值就可以知道,如果有更小的,則必有i != k,此時就需要交換,此輪下來,array[i]一定是最小的,接下來再進行下一個元素的處理……
c語言選擇法
// 我把你的程序修改了下,添加了些注釋,你應該會看明白滴
// sort(int *, int)函數是由大到小的排序方法。採用的算法
// 是第一次從x[0]…x[4]中選出個最大的數,然後記錄下它的索引,
// 如果第一個數不是最大的,就把第一個數和最大數進行交換,使得
// x[0]是五個書中的最大數,第二次就從x[1]…x[4]中選一個最大的
// 然後把它放在x[1]的位置上。5個數,其實只需要四次就可以排好序滴
void sort(int *x,int n)
{
// i,j都是循環變量temp是用於交換的臨時變量,max是用於記錄每一趟循環
// 中找到的最大值的下標。我這裡的temp對應你原理的t,max對應你原來的k
int i, j, temp, max;
// 1.外層的for循環用於控制查找的趟數,n個數排序,只需要n-1趟排序就可以滴
// 2.你原來是 i=n-1其實可以改為in-1.可以少一趟滴。
// 3.比如 1 2 3 這三個數排序,你可以先 假設第一個數即1是最大的,然後讓1與第二個
// 4.數進行比較即1與2比較1 2你記下2對應的下標,再讓2與第三個數比較2 3再記下
// 5. 3的下標所以3是最大的數字把3放到1的位置,把1放到3的位置,即交換位置。
// 6.經過一次排序後變為3 1 2 第二次再排1 與2先假設1是1與2中最大的12記下2的下標
// 7.交換1,2位置變為2 1 所以3個數進過兩趟排序後已經變為有序了即3 2 1
// N個數只需N-1趟循環便可有序,外層循環用於控制循環趟數
for(i=0; in-1; i++)
{
// 先假設下標為i的數字是最大值
max = i;
// 也是用於控制循環次數,在第i趟中找出最大數的下標
// 第一次是從x[0]..x[4]這5個數中找,第二次是從
// x[1]..x[4]4個數中找這4個數的最大值…第四次從x[3]與x[4]這兩個數
// 中找最大值
for(j=i+1; jn; j++)
{
// 用於找最大值的下標
if(x[j] x[max])
max = j;
}
// 看第i趟循環中看x[i]是不是最大值如果是就不需要交換了
// 你也可以改為 if (x[i] x[max]){交換兩個數}
if(i!=max)
{
temp = x[i];
x[i] = x[max];
x[max] = temp;
}
}
}
C語言 選擇法排序 劃線的地方 k為什麼不能寫成i
因為i是外層循環變量,在循環體內不應改變其值!所以要用k作為中間臨時變量
請問C語言選擇排序的代碼中引入“k”具體有什麼作用?
k是標記最小數的 首先把k置為i 然後一輪比較下來(跟j比)如果j比k小 就把k置為j 最後把最小的那個記為a[k] 然後再跟a[0] 交換位置 希望你能明白
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/186627.html