C語言-快速排序
阿新 • • 發佈:2021-02-05
思路
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;
}