1. 程式人生 > 其它 >C語言-快速排序

C語言-快速排序

技術標籤:輪子c語言演算法排序演算法快速排序

思路

step 1

  • 從待排序陣列中確定一個值,記錄它的位置,把其他小於(等於)它的值放到左邊,大於(等於)它的值放到右邊

step 2

  • 將該值放到中間位置

step 3

  • 對該值左右的其他元素分別執行以上操作

程式碼

   typedef struct dataType{
       int id;
   }DataType;
   
   void swap(DataType * data1,DataType * data2)
   {
       int temp = data1->id;
       data1->id =
data2->id; data2->id = temp; } //返回一個位置,此位置左邊的元素都小於等於它,右邊的元素都大於等於它 int part(DataType * data,int low,int high) { int target = low+1; int key = data[low].id;//選取該值作為key for(int i = low+1; i <= high; ++i) { if(data[i].id <= key)//找到一個小於等於key的值,置換到target的位置
{ swap(&data[i],&data[target]); ++target;//target右移 } } swap(&data[target-1],&data[low]);//將key值放到中間 return target-1; } void qsort(DataType * data,int low,int high) { int mid; if(low >= high)
//結束條件 return; mid = part(data,low,high);//中間位置 qsort(data,low,mid-1);//左邊排序 qsort(data,mid+1,high);//右邊排序 } int main() { DataType data[10]; data[0].id = 4; data[1].id = 4; data[2].id = 3; data[3].id = 3; data[4].id = 4; data[5].id = 4; data[6].id = 2; data[7].id = 2; data[8].id = 8; data[9].id = 7;/* data[0].id = 9; data[1].id = 8; data[2].id = 7; data[3].id = 6; data[4].id = 5; data[5].id = 4; data[6].id = 3; data[7].id = 2; data[8].id = 1; data[9].id = 0;*/ qsort(data,0,9); for(int i=0;i<10;++i) { printf("%d\n",data[i].id); } return 0; }

效果

在這裡插入圖片描述