#include //快速排序法
void sort(int *a, int left, int right)
int i = left;
int j = right;
int key = a[left];
while(i < j) /*控制在當組內尋找一遍*/
a[i] = a[j];
/*找到乙個這樣的數後就把它賦給前面的被拿走的i的值(如果第一次迴圈且key是
a[left],那麼就是給key)*/
while(i < j && key >= a[i])
/*這是i在當組內向前尋找,同上,不過注意與key的大小關係停止迴圈和上面相反,
因為排序思想是把數往兩邊扔,所以左右兩邊的數大小與key的關係相反*/
a[j] = a[i];
}a[i] = key;/*當在當組內找完一遍以後就把中間數key回歸*/
sort(a, left, i - 1);/*最後用同樣的方式對分出來的左邊的小組進行同上的做法*/
sort(a, i + 1, right);/*用同樣的方式對分出來的右邊的小組進行同上的做法*/
/*當然最後可能會出現很多分左右,直到每一組的i = j 為止*/
}//氣泡排序法
void maopao(int *a, int len)}}
}int main()
; sort(a, 0, 9);
for (int i=0; i<10;i++)
printf("\n");
printf("\n");
printf("\n");
int b[10] = ;
maopao(b, 10);
for (int i=0; i<10;i++)
printf("\n");
return 0;
}
排序 氣泡排序和快速排序
實現思路 把第乙個元素作為標記,依次判斷後續的值,如果小於它則放在左邊,如果大於它則放右邊,同理把左右兩部分看成乙個整體一直遞迴,最後再陣列拼接起來 它的最優時間複雜度為o nlogn 以標記元素為中心,正好每次左右都能均勻分配 最糟糕時間複雜度為o n 2 標記元素每次是最大或最小值,使所有數都劃...
氣泡排序和快速排序
來自 氣泡排序1 自創的,不知道它叫什麼排序,和冒泡差不多。public void risepot ref int array 氣泡排序2 public void risepot ref int array 快速排序 public void quicksort ref int arr,int low...
氣泡排序和快速排序
pragma mark pragma mark 氣泡排序 選擇排序 void swap int a,int b void bubblesort int a,int length 簡單優化,對於已經有序的序列,省去接下的迴圈。對於這種優化,實際還需考慮,多了賦值和判斷操作。if temp length...