C語言冒泡排序並返回索引
/***************************************************************
*Name :SwapElement
*Fun :交換兩個數據
*InputParaments :a、b是兩個待交換的數據指針
*OutputParaments :None
****************************************************************/
void SwapElement(Element* a ,Element* b) {
Element t;
t = *a;
*a = *b;
*b = t;
}
/***************************************************************
*Name :SwapIndex
*Fun :交換兩個索引
*InputParaments :a、b是兩個待交換的索引指針
*OutputParaments :None
****************************************************************/
void SwapIndex(int* a, int* b) {
int t;
t = *a;
*a = *b;
*b = t;
}
/***************************************************************
*Name :BubbleSort
*Fun :冒泡排序,並返回索引
*InputParaments :data是待排序的數據;index是輸出參數,用於返回索引;
len是數組長度;mode是排序模式,0代表升序,1代表降序。
*OutputParaments :None
****************************************************************/
void BubbleSort(Element* data, int * index, int len, int mode) {
//索引初始化
for (int i = 0; i < len; i++) {
index[i] = i;
}
for (int i = 0; i < len-1; i++) {
for (int j = i + 1; j < len; j++) {
if (mode == 0) {
if (data[i] > data[j]) {
SwapElement(data+i,data+j);
SwapIndex(index+i,index+j);
}
}else if(mode==1){
if (data[i] < data[j]) {
SwapElement(data + i, data + j);
SwapIndex(index + i, index + j);
}
}
}
}
}