C 之快速排序

2022-08-28 08:15:10 字數 2125 閱讀 1918

演算法描述

1.假定陣列首位元素為「樞軸」,設定數列首位(begin)與末位(end)索引;

2.由末位索引對應元素與「樞軸」進行比較,如果末位索引對應元素大於「樞軸」元素,對末位索引減一(end--),直到比較出大於「樞軸」元素,將該元素覆蓋到首位,對應索引上的數值空出;

3.由首位索引對應元素與「樞軸」進行比較,如果首位索引對應元素小於「樞軸」元素,對首位索引加一(begin++);直到比較出小於「樞軸」元素,將該元素覆蓋到步驟2中空出位置,同時對應索引上的數值空出;

4.重複步驟2與步驟3,直到begin==end結束迴圈,這時候begin與end已指向同一位置,將「樞軸」元素覆蓋到該位置;

5.這時候該位置前面元素都小於「樞軸」元素,該位置後面元素都大於「樞軸」元素,第一輪迴圈結束,對前後兩部分執行相同步驟,通過「遞迴」最終將陣列中數值完成排序;

**實現

public

int quick(int arr, int begin, int end) //

通過自我呼叫實現「遞迴」

int pivotindex = quickcondition(arr, begin, end); //

獲得「樞軸」索引

quick(arr, begin, pivotindex - 1); //

對所有小於「樞軸」元素再次比較

quick(arr, pivotindex + 1, end);//

對所有大於「樞軸」元素再次比較

return

arr;

}public

int quickcondition(int arr, int begin, int

end)

arr[begin] =arr[end];

while (arr[begin] < pivot && begin < end) //

通過比較找到第大於「樞軸」元素的索引,進行替換

arr[end] =arr[begin];

}arr[begin] = pivot; //

當begin == end 跳出迴圈將「樞軸」覆蓋到該索引上

return

begin;

}

完整**

using

system;

namespace

}class

setarray

位數值:

", i);

arr[i] =convert.toint32(console.readline());

}console.clear();

console.write(

"arr =

console.write(

"}\n");

return

arr;}}

class

quicksort

int pivotindex = quickcondition(arr, begin, end); //

獲得「樞軸」索引

quick(arr, begin, pivotindex - 1); //

對所有小於「樞軸」元素再次比較

quick(arr, pivotindex + 1, end);//

對所有大於「樞軸」元素再次比較

return

arr;

}public

int quickcondition(int arr, int begin, int

end)

arr[begin] =arr[end];

while (arr[begin] < pivot && begin < end) //

通過比較找到第大於「樞軸」元素的索引,進行替換

arr[end] =arr[begin];

}arr[begin] = pivot; //

當begin == end 跳出迴圈將「樞軸」覆蓋到該索引上

return

begin;

}public

void display(int

arr)

console.writeline();}}

}

快速排序之C

通過一趟排序將要排序的資料分成 兩段 其中一段的資料均小於另外一段資料,在以此方法對兩段資料相同操作 遞迴 平均 nlogn 最差情況 o n 2 確定分界點 q i 可以隨機取,兩個指標,乙個指向頭部,乙個指向尾部 跑一趟後 一側資料全部小於另一側資料 遞迴處理左右兩側資料 include usi...

快速排序之C 實現

快速排序之c 實現 一趟快速排序的演算法是 1 設定兩個變數i j,排序開始的時候 i 0,j n 1 2 以第乙個陣列元素作為關鍵資料,賦值給key,即key a 0 3 從j開始向前搜尋,即由後開始向前搜尋 j 找到第乙個小於key的值a j 將a j 和a i 互換 4 從i開始向後搜尋,即由...

C 複習之堆排序 快速排序

堆是具有下列性質的完全二叉樹 每個節點的值都大於或等於其左右孩子節點的值 稱為大頂堆 或者每個節點的值都小於或等於其左右孩子節點的值 稱為小頂堆 堆排序就是利用堆進行排序的方法 基本思想是 將待排序的序列構造成乙個大頂堆 此時 整個序列的最大值就是堆頂的根結點 將它移走 其實就是將其與堆陣列的末尾元...